0

レイアウトで標準のAndroidボタンを使用しようとしていますが、押されていないときは背景を透明にしたり、テキストを左揃えまたは右揃えにしたり、その他のカスタム変更を行ったりします。標準ボタンから継承するのに欠けている簡単な方法はありますが、いくつかのプロパティを変更しますか?私は以下の2つの投稿を見ましたが、それらを機能させることができず、それらのページにコメントを残すには新しすぎます。さらに、これらの解決策の両方に問題があります。

onClickでデフォルトのボタンの色変更プロパティを無効にする方法ごとに@android:drawable / btn_default sourceをコピーしようとしましたが、そこからリンクされているすべてのリソースはプライベートです。これらのプライベートファイルのソースを見つけようとしましたが、androidsdkフォルダーに移動してrawファイルを取得しても見つからないものもあります。これが標準ボタンを編集する方法である場合、これらのファイルはどこにありますか?これらのプライベートファイルをコピーすることは間違いなく理想的ではありませんが、別のAPIで標準の選択/押された/その他のボタンが変更された場合でも、この場合は古いものを使用し、一貫性のないボタンがあります...

また、一般的にカスタムボタンを作成するのに適した別の色の標準Androidボタンを見たことがありますが、標準ボタンとまったく同じように設定するにはどうすればよいですか?つまり、色は何ですか、グラデーションは正しいかなどです。繰り返しますが、これには、標準のボタンが変更された場合でも古い値を使用するという問題があります。

4

2 に答える 2

2

ボタンにスタイルを使用します。

<Button id= ... style="@style/myButton" />

values / styles.xml:

<style name="myButton" parent="@android:style/Widget.Button">
  <item name="android:background">@drawable/myBackground</item> 
</style>

さまざまなボタンの状態(たとえば、押された状態など)を処理するには、セレクターのドローアブルリソース(たとえば、drawable / myBackground.xml)が必要です。

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!--  Non focused states 
  --> 
  <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
  <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
 <!--  Focused states 
  --> 
  <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
  <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
 <!--  Pressed 
  --> 
  <item android:state_pressed="true" android:drawable="@drawable/button_press" /> 
</selector>

drawable / button_press.xmlは、必要に応じて、グラデーション、形状、境界線などを指定できます。

背景のグラデーション、丸みを帯びた角、および境界線を実行するbutton_press.xmlの例:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <stroke android:width="1dp" android:color="#FF404040" /> 
  <corners android:radius="6dp" /> 
  <gradient android:startColor="#FF9B00" android:centerColor="#FFB300" android:endColor="#FFCA00" android:angle="90" /> 
</shape>
于 2012-07-12T17:36:48.943 に答える
0

parent = "@ android:style / Widget.Button"でスタイルを使用することに関するCSmithの回答の最初の部分は、左寄せまたは右寄せのテキストなどのボタンのプロパティを変更するための最良の方法です。ただし、残りの回答では、独自のセレクターを作成する方法について説明しているため、デフォルトのボタンからセレクターを継承するソリューションを追加して、変更する特定のセレクターをオーバーライドするだけだと思いました。

デフォルトの動作が必要なセレクターにandroid:drawable = "@ android:drawable / btn_default"を入力するだけで、変更するセレクターにのみカスタムフィールドを指定できます。すべてのセレクターを継承するが、通常は灰色の代わりに透明な背景を持つボタンを作成しようとしている場合は、次のようにします(わかりやすくするために、CSmithの回答の最初の部分を複製します。CSmithに感謝します)。

カスタムスタイルを使用してボタンを定義します。

<Button id= ... style="@style/myButton" />

res / values / styles.xml:

<style name="myButton" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/myBackground</item>
    ...other changes to default button... 
</style>

次に、すべてのセレクターを継承し、灰色で表示されているセレクターを上書きします:res / drawable / myBackground.xml:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" 
          android:drawable="@drawable/transparent_btn" />    
    <item android:state_pressed="true"
          android:drawable="@android:drawable/btn_default" />
    <item android:state_focused="true"
          android:drawable="@android:drawable/btn_default" />
    <item android:drawable="@drawable/transparent_btn" />
</selector>

そして、res / drawable /transparent_btn.xmlで:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@android:color/transparent" />
</shape>

注:この例では、ボタンが有効かどうかについて特定の動作が必要な場合は、state_enabledについては気にしません。これらのセレクターも上書きするだけです。

于 2012-07-12T20:00:56.457 に答える