• 締切済み

Android RadioButton

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

  • Java
  • 回答数3
  • ありがとう数2

みんなの回答

  • 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

  • androidのサンプルソースについての質問

    このページを参考に学習をしていたのですが http://libro99.appspot.com/index3?id=29&page=2&label=android .javaに追加するぶぶんで text.setText(selradio.getText()); ~~~~ の波線の部分のエラーをどうしても消すことができず 困っています package test.radiobutton; import android.app.Activity; import android.os.Bundle; import android.widget.RadioButton; import android.widget.RadioGroup; public class radiobuttontest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RadioGroup group = (RadioGroup)this.findViewById(R.id.group); RadioButton radio1 = (RadioButton)this.findViewById(R.id.radio1); RadioButton radio2 = (RadioButton)this.findViewById(R.id.radio2); radio2.setChecked(true); int selid = group.getCheckedRadioButtonId(); RadioButton selradio = (RadioButton)this.findViewById(selid); text.setText(selradio.getText()); } } main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <RadioGroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:text="@string/radio1_label" android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:text="@string/radio2_label" android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RadioGroup> </LinearLayout> これ以上はかけませんがページの指示通りにやってるつもりです どなたかご教授お願いします

    • ベストアンサー
    • Java
  • Android プログラム

    (ActionBarActivity が非推奨となり) AppCompatActivity を継承して Activity を作ってみたのですが、Toolbar の Logo(アイコン)が表示できません。 Toolbar の Logo(アイコン)の表示方法を ご存知の方が居ましたら ご教授下さいませm(_ _)m 開発環境は「Android Studio」、実行環境は「Galaxy S、Galaxy Note II」の2つの端末ですチェックしています アイコン・ファイルは「C:\Android\<sdk>\platforms\android-23\data\res」フォルダー内の「drawable-mdpi、drawable-hdpi」フォルダー内のファイルを使用しています。 > ActionBar oToolbar = getSupportActionBar( ); > oToolbar.setLogo(R.drawable.ic_menu_info_details); ↑両端末で表示できませんでした。 ちなみに「AndroidManifest.xml」内で「android:logo="@drawable/ic_menu_info_details"」と設定してもダメでした。

    • ベストアンサー
    • Java
  • Android Icon のイベント

    ActionBarActivity が非推奨となり AppCompatActivity を継承して Activity を作ってみたのですが、Toolbar の Icon のイベントの取得方法が分かりません。 (ここで「Icon又はLogoの表示」を ご教授いただいたばかりなのですが) Toolbar の Icon のイベントの取得は そんなに難しくないだろうと思って、イロイロ検索しても全然ダメでした。 Toolbar の Icon のイベントの取得方法を ご存知の方が居ましたら ご教授下さいませm(_ _)m ◆ ThemeでActionBarを使用しない設定 『AndroidManifest.xml』内 <application android:theme="@style/AppTheme" ~ 『values/styles.xml』内 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ◆「android.support.v7.widget.Toolbar」をsetSupportActionBarに設定 『layout/activity_main.xml』内 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" ~ <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="#9b7fff" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /> ◆ Iconを表示 『MainActivity.java』内 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar oActionBar = getSupportActionBar( ); // oActionBar.setLogo(R.drawable.~); // Toolbar に LogoIcon を表示。 oActionBar.setIcon(R.drawable.~);// Toolbar に Icon を表示。

  • Androidのレイアウトについて

    こんばんは ちょっとアンドロイドのレイアウトでちょっと戸惑って質問来ました。 添付画像のように画像の横のテキストを2行(本来は右より)で配置したいのですが、うまく設定出来ません。 TableLayoutをどういじってもダメ 泣 AbsoluteLayoutを見つけましたが、上部のテキストが長い時に使えない事がわかりどうしようもありません。 どのようにしたら、画像の横にテキスト行をニ行置けるでしょうか? <TableLayout android:layout_height="wrap_content" android:id="@+id/tableLayout1" android:layout_width="fill_parent"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:id="@+id/imageView1" android:src="@drawable/icon" android:layout_height="wrap_content"></ImageView> <LinearLayout android:id="@+id/linearLayout5" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView5" android:layout_height="wrap_content"></TextView> </LinearLayout> <TextView android:text="TextView" android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> </TableRow> </TableLayout> 取り敢えず今の問題の所が上です。 【知りたい事】 画像の横にニ行以上テキストを配置したい。 【やった事】 いろいろやり過ぎて書ききれません 泣 【開発環境】 Eclipse 何卒お知恵を貸してください。お願します。

    • ベストアンサー
    • XML
  • アンドロイドで、別のクラスのインスタンスを呼ぶ方法

    アンドロイドの場合、別のクラスのインスタンスを呼び出すにはどうしたら良いですか? どうしてもわからずとても困っています。どうかご教授下さい。 例えば、Activityを継承しているクラスAがImageViewを継承しているクラスIのインスタンスを呼び出したいとします。 通用ならクラスA内で、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); なんてインスタンス変数もたせて、 myExtendsImageViewから変数なりメソッドなり呼び出せれば済む話なんですが、 アンドロイドの場合、 アプリの起動時に自動的にActivity継承クラスとImageView継承クラスのインスタンスが生成されるようです。 そしてそのインスタンスがどこにあるかわからないので、呼び出すことができません。 無理やり、 ExtendsImageView myExtendsImageView = new ExtendsImageView(); と新しくインスタンスをつくるのも変な気がします・・・。 どのようにすれば別のクラスのインスタンスを呼び出すことができるでしょうか?どうかご教授下さい。。

  • android sdkについてのサンプルアプリ一つすらおぼつかない初心

    android sdkについてのサンプルアプリ一つすらおぼつかない初心者ですが 質問させていただきます ネットで調べて見つけたソースコードのHelloWorldを手打ちで入力してデバッグした上で実行したのですが エミュレータが Android_ という文字だけを表示してとまってしまいます 実行後エミュレータを閉じたときに出るログは [2010-11-02 10:48:36 - helloworld] ------------------------------ [2010-11-02 10:48:36 - helloworld] Android Launch! [2010-11-02 10:48:36 - helloworld] adb is running normally. [2010-11-02 10:48:36 - helloworld] Performing jp.android.helloworld.HelloWorld activity launch [2010-11-02 10:48:36 - helloworld] Automatic Target Mode: launching new emulator with compatible AVD 'test' [2010-11-02 10:48:36 - helloworld] Launching a new emulator with Virtual Device 'test' [2010-11-02 10:48:41 - helloworld] New emulator found: emulator-5554 [2010-11-02 10:48:41 - helloworld] Waiting for HOME ('android.process.acore') to be launched... [2010-11-02 10:49:32 - helloworld] emulator-5554 disconnected! Cancelling 'jp.android.helloworld.HelloWorld activity launch'! 使っている環境は Eclipse : Galileo Version: 3.5.1 Build id: I20090611-1540 Java Beans 製品バージョン: NetBeans IDE 6.9.1 (Build 201007282301) Java: 1.6.0_21; Java HotSpot(TM) Client VM 17.0-b17 システム: x86 上で動作する Windows XP バージョン 5.1; MS932; ja_JP (nb) ユーザーディレクトリ: C:\Documents and Settings\User\.netbeans\6.9 です 参考にしたページはこれです http://firespeed.org/diary2/read/read.php?diary=kenz-1096 どなたかご教授お願いします

  • iPhone4と各社アンドロイドについて

    現在、各社からスマートフォンが出ていますが、Apple以外は全てアンドロイドです。私はiPhone4ユーザーですが、他のアンドロイド系スマートフォンはiPhone4と比べて、基本機能でiPhone4より優れている点をどうも見出せないのです。 まず、レスポンスですが、インターネット画面や電子書籍のスクロールにおいて、iphone4は非常に滑らかですが、アンドロイド系端末はどうしてもカクカクしてしまいます。そのため、止めたいところで止まらず、行き過ぎてしまうことが良くあります。 つぎにアイコンの配置などの使いやすさについて。アンドロイド系端末は統一性がなく、非常に分かりづらく思います。まあ慣れの問題でしょうが。 液晶(解像度)もiPhone4と同等な物はありますが、超えている物はまだ無いと思います。 電池持ちもiPhone4のほうが良いと言われています。 カメラ機能は画素数はiPhone4より上の物は多々ありますが、iPhone4も500万画素ですし、使っていて不満はありません。 また、今のところ、セキュリティなどの安全性もiPhone4のほうが上と言えます。 さすがにお財布ケータイや3Dは出来ませんが、あくまで基本機能ということで。 iPhone4ユーザーなのでどうしてもiPhone4びいきになっていますが、店頭でアンドロイド系端末をいじっても、どうしてもiPhone4を上回る魅力を感じられません。 アンドロイド系端末のほうが優れていると思う方、どんなところが優れていますか? もちろん、iPhone4の方が総合的にみて良いという方もコメント募集です。

  • Android用ゲームを作っています。

    現在Androidゲームを作っているのですが、現在時間を取得し、時刻を表示したり、背景画像などを変えたりしたいのですがどのように取得し、表示させればいいのでしょうか?ソースコードは ・MainActivity.java package andorid.eample.game2; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); setContentView(l); l.addView(new PView(this, null, 0)); } } ・PView.java package andorid.eample.game2; import android.annotation.SuppressLint;4 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import android.content.res.Resources; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.text.format.Time; import android.media.MediaPlayer; public class PView extends View{ Paint paint = new Paint(); Date date = new Date(); int flg = 0; int charaX =250; int charaY = 250; Resources res = this.getContext().getResources(); Bitmap bg = BitmapFactory.decodeResource(res, R.drawable.bg1); Bitmap chara = BitmapFactory.decodeResource(res, R.drawable.charan); Bitmap charaT = BitmapFactory.decodeResource(res, R.drawable.charat); Bitmap box= BitmapFactory.decodeResource(res, R.drawable.boxt); //音楽読み込み MediaPlayer se = MediaPlayer.create(getContext(),R.raw.ehehe); public PView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs); // TODO 自動生成されたコンストラクター・スタブ } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas c){ c.drawBitmap(bg,0,100,paint); if(flg == 0) { c.drawBitmap(chara,charaX,charaY,paint); } if(flg == 1) { c.drawBitmap(charaT,charaX,charaY,paint); c.drawBitmap(box,50,200,paint); } invalidate(); } public boolean onTouchEvent(MotionEvent me) { //タッチされた時 if(me.getAction() == MotionEvent.ACTION_DOWN) { if(me.getAction() == MotionEvent.ACTION_DOWN) { if(flg == 0) { flg = 1; se.start(); } else{ flg =0; } } } return false; } } このような感じになっています どうかアドバイスをお願いします。

    • ベストアンサー
    • Java
  • Androidのローカルで同期するアプリ

    Androidのローカル内でフォルダ同士を同期してくれるようなアプリはをご存じないでしょうか? もしくは私の用途にあったアプリをご存じないでしょうか? Dropboxのカメラアップロードを利用するとAndoroidのカメラフォルダからのみアップロードということになりますが、DownloadフォルダやLINEの画像もアップロードをカメラフォルダ経由でアップロードしたいと思っています。 なぜかというとローカルのカメラフォルダからアップロードをするとファイル名をアップロード時に日付に変換してくれるのでそれに統一したいのです。 今までDropsyncというものを使っていたのですがローカル内では同期してくれないので別のアプリを探しています。 お勧めのアプリをご存知でしたらよろしくお願いします。

  • android × キーボード

    こんにちは。 質問なんですがAndroid端末でBluetoothキーボードを操作した時、キー配置をカスタマイズする方法やアプリをご存知ないでしょうか?。 いま使っているBluetoothキーボードは文字入力は問題ないんですが、括弧入力や句読点がズレているので、可能なら修正したいと思いまして。 ご存知の方いましたらご回答のほど、宜しくお願い致します。 ※使用環境 Android端末 Nexus7 2013 (OS 6.0.1) 文字入力アプリ Google 日本語入力 Bluetoothキーボード iBUFFALO Bluetooth3.0 BSKBB24BK 要root化での方法でも構いません。