• 締切済み

Android RadioButton

【Android/Java】 ActionBarActivity が非推奨になったので、AppCompatActivity で Activity を作ってる訳ですが、AppCompatActivity に配置した RadioButton などと DialogBox に配置した RadioButton などと見え方が全く異なってしまいます。 上から1番目の画像が AppCompatActivity 配置時の RadioButton。 上から2番目の画像が DialogBox 配置時の RadioButton。 ActionBarActivity は非推奨になったので AppCompatActivity を使って「上から2番目の画像の DialogBox 配置時の RadioButton」に統一したいのですが、ご存知の方がいらっしゃいましたら ご教授お願い致しますm(_ _)m

みんなの回答

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.3

>setSupportActionBarの事について Toolbarを設置してActionBarとして使わせる場合の認識として、正しい認識をなさっています。 Toolbarを配置しなくてもThemeでActionBarありのThemeを使ってしまえばgetSupportActionBarでActionBarが取得出来るのでそれで良いのでは?という話でした。 もちろんToolbarを組み合わせて何かをしたい場合はNoActionbarのThemeでsetSupportActionBarを使うのは正しいです。(もちろんToolbarのままでも使用できますが) >Builderのコンストラクタについて Theme.AppCompat.Light.Dialog.AlertのThemeをあてる場合は以下のようにします new AlertDialog.Builder(context, R.style.Theme_AppCompat_Light_Dialog_Alert); styleのxmlで定義した名前の.(ドット)は_に置き換わります(Javaの言語上.だと変数名に出来ないので) 独自にMyDialogThemeを定義してらっしゃいますので new AlertDialog.Builder(getContext( ), R.style.MyDialogTheme); で正しいです >RadioButtonが反映されない javaのソースコード内で直接RadioButtonを生成する場合は android.support.v7.widget.AppCompatRadioButton を使用する必要があります radio = new AppCompatRadioButton(getContext( )); としてください inflateで作られるクラスは実はAppCompatXXXになっています inflateでやった場合にはうまくいくのはこのせいです >RadioButtonのIDが同じに xmlでidを指定しているのでそのxmlからinflateしたものは当然同じIDを持ちます javaのコード上でidを指定してあげると良いと思います。 radio.setId(R.id.radio1); IDを定義する場合はxmlで <item type="id" name="radio1"/> <item type="id" name="radio2"/> などとすると良いでしょう

amanojaku1
質問者

補足

> Theme.AppCompat.Light.Dialog.AlertのThemeをあてる場合は以下のようにします > new AlertDialog.Builder(context, R.style.Theme_AppCompat_Light_Dialog_Alert); > styleのxmlで定義した名前の.(ドット)は_に置き換わります(Javaの言語上.だと変数名に出来ないので) > javaのソースコード内で直接RadioButtonを生成する場合は > android.support.v7.widget.AppCompatRadioButton > を使用する必要があります > radio = new AppCompatRadioButton(getContext( )); > としてください こちらは出来ました!、大変 ご丁寧に有難う ございますm(_ _)m > styles.xml設定例(minSDKバージョンによってはバージョン毎に変えてください) > <style name="AppTheme" parent="android:Theme.Holo.Light"> > </style> > > <style name="AppTheme.NoActionBar"> > <item name="android:windowActionBar">false</item> > <item name="android:windowNoTitle">true</item> > </style> 「android:Theme.Holo.Light」、「android:windowActionBar」にエラーが出ました。 SDKは「Android 6.0 API Level 23」だけをインストールしています、「minSdkVersion」は「8」です(世界の Android 端末のシェアは「API Level 8」付近あたりが90%以上らしいので)。 > Toolbarを配置しなくてもThemeでActionBarありのTheme 良く分かりませんが「Theme.~.ActionBar」みたいなモノがあるのでしょうか?

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.2

旧UIというのは多分マテリアルでないThemeの事を言っていると思うので、以前のThemeを使ってActionBarを使わない設定にしたらおそらく大丈夫じゃないでしょうか。 しかし、ToolbarをsetSupportActionBarでActionBar化するのであればNoActionBarにせずに普通にActionBarを使えば良いのでは?と少し疑問に思います styles.xml設定例(minSDKバージョンによってはバージョン毎に変えてください) <style name="AppTheme" parent="android:Theme.Holo.Light"> </style> <style name="AppTheme.NoActionBar"> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style>

amanojaku1
質問者

お礼

補足 下記「this」は「RadioGroup」を継承しています、「getLayoutInflater( ).inflate(~)」でインスタンスを作成すると新UI(マテリアル・デザイン?)になるのですが、複数の RadioButton を作成すると ID が全て同じになってしまいますが、どこか間違っているのでしょうか? radio = (RadioButton)((MainActivity)this.getContext( )).getLayoutInflater( ).inflate( R.layout.myradiobutton, null); this.addView(radio); 「myradiobutton.xml」は下記のように設定しています。 <?xml version="1.0" encoding="utf-8"?> <RadioButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:id="@+id/radioButton" style="@style/Theme.AppCompat.Light" />

amanojaku1
質問者

補足

> ToolbarをsetSupportActionBarでActionBar化するのであればNoActionBarにせずに普通にActionBarを使えば良いのでは?と少し疑問に思います 記憶に定かではありませんが、AppCompat のデフォルトの Toolbar は 旧ActionBar と互換性がないので、古いプログラムを使いたい場合は AppCompat のデフォルトの Toolbar を無くして、プログラムで ActionBar をセットしろ、みたい事だったように思われます。 > そのDialogにThemeを渡していないからだと思われます > 例えばAlertDialogなどを使う場合には > android.support.v7.app.AlertDialog.Builderを使用して > (Context context, int theme)のコンストラクタを使用し、 > 渡すThemeにはTheme.AppCompat.Light.Dialog.Alertなどを渡す事でマテリアルデザインのUIになる筈です 現在、上記のみ試しています。 良く分かりませんが下記のように指定してみましたが、コンパイル・エラーになりました。 import android.support.v7.app.AlertDialog; oDB = new AlertDialog.Builder(getContext( ), Theme.AppCompat.Light.Dialog.Alert); oDB = new AlertDialog.Builder(getContext( ), R.Theme.AppCompat.Light.Dialog.Alert); oDB = new AlertDialog.Builder(getContext( ), R.style.Theme.AppCompat.Light.Dialog.Alert); oDB = new AlertDialog.Builder(getContext( ), Resources.Theme.AppCompat.Light.Dialog.Alert); oDB = new AlertDialog.Builder(getContext( ), Resources.style.Theme.AppCompat.Light.Dialog.Alert; wdgBody = oDB.create(); 「styles.xml」に下記のように「MyDialogTheme」を設定。 <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> プログラムで下記のように指定してみましたが、旧UIのままでした。 import android.support.v7.app.AlertDialog; oDB = new AlertDialog.Builder(getContext( ), R.style.MyDialogTheme); wdgBody = oDB.create(); 現在、RadioButton を下記のようにプログラムで生成してるのが原因でしょうか? プログラムで RadioButton に直に Theme を設定する方法はありますでしょうか? radio = new RadioButton(getContext( ));

  • HNEX
  • ベストアンサー率62% (43/69)
回答No.1

そのDialogにThemeを渡していないからだと思われます 例えばAlertDialogなどを使う場合には android.support.v7.app.AlertDialog.Builderを使用して (Context context, int theme)のコンストラクタを使用し、 渡すThemeにはTheme.AppCompat.Light.Dialog.Alertなどを渡す事でマテリアルデザインのUIになる筈です

amanojaku1
質問者

お礼

> 個人的には旧UIのThemeの方が好きなので、できればAppCompatActivityの方を旧UIのThemeに設定したいのですが、可能でしょうか? 補足です。 『styles.xml』での Theme の設定は下記の通りです(プログラム上、ここでは必ず「NoActionBar」の設定が必要です)。 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 関係ないでしょうが「Light.NoActionBar」に対応するための『activity_main.xml』での Toolbar の設定は下記の通りです。 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="@color/Background_Cornflowerblue" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 関係ないでしょうが「Light.NoActionBar」に対応するための『MainActivity.java』での Toolbar の設定は下記の通りです。 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionbar = getSupportActionBar();

amanojaku1
質問者

補足

ありがとうございますm(_ _)m 現在、わりと忙しいので、暇になったら試してみます。 個人的には旧UIのThemeの方が好きなので、できればAppCompatActivityの方を旧UIのThemeに設定したいのですが、可能でしょうか?

関連するQ&A

専門家に質問してみよう