こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Android RadioButton

【Android/Java】

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

投稿日時 - 2016-04-30 12:42:06

QNo.9166023

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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"/>
などとすると良いでしょう

投稿日時 - 2016-05-27 11:07:52

補足

> 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」みたいなモノがあるのでしょうか?

投稿日時 - 2016-05-28 03:52:54

ANo.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>

投稿日時 - 2016-05-23 17:33:23

補足

> 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( ));

投稿日時 - 2016-05-26 19:15:33

お礼

補足

下記「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" />

投稿日時 - 2016-05-27 02:36:41

ANo.1

そのDialogにThemeを渡していないからだと思われます

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

投稿日時 - 2016-05-20 11:40:54

補足

ありがとうございますm(_ _)m
現在、わりと忙しいので、暇になったら試してみます。

個人的には旧UIのThemeの方が好きなので、できればAppCompatActivityの方を旧UIのThemeに設定したいのですが、可能でしょうか?

投稿日時 - 2016-05-22 12:44:19

お礼

> 個人的には旧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();

投稿日時 - 2016-05-22 14:02:56

あなたにオススメの質問