2015-05-14 14 views
7

Próbuję nowego AlertDialog z appcompat v7 22.1.1.Okno dialogowe alertu Appcompat Tło przycisku czynności W stanie wciśniętym

Działa całkiem dobrze (we wszystkich wersjach systemu Android) jak na zdjęciu.

enter image description here

Style dla AlertDialog jest to. (Na razie używam jawnie wpisanej wartości kolorów zamiast zasobów kolorów)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 

      <item name="colorPrimaryDark">#111111</item> 

      <item name="colorPrimary">#00ddff</item> 

      <item name="colorAccent">#0044aa</item> 

      <item name="colorButtonNormal">#00aaaa</item> 

      <item name="colorControlHighlight">#00ddff</item> 

      <item name="alertDialogTheme">@style/AlertDialogTheme</item> 

</style> 
<style name="AlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert"> 
       <item name="colorAccent">#0044aa</item> 
       <item name="android:background">#ffffff</item> 
       <item name="android:textColorPrimary">#000000</item> 
       <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item> 
</style> 

<style name="MyTitleTextStyle"> 
       <item name="android:textColor">#0044aa</item> 
       <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item> 
</style> 

Moje pytanie brzmi,

1) jak zmienić kolor statePressed który jest zaokrąglony (szary) na obrazie?

2) Brak przyciśniętego koloru w Androidzie = = 21, co jest hackerem?

3) Jak mogę mieć różne kolory przycisków akcji (czy to możliwe)?

Każda pomoc będzie świetna.

Odpowiedz

15

Można użyć styl atrybuty jak

  • buttonBarButtonStyle
  • buttonBarNegativeButtonStyle
  • buttonBarNeutralButtonStyle
  • buttonBarPositiveButtonStyle

Przykład:

<style name="dialog_theme" parent="Theme.AppCompat.Dialog.Alert"> 
    <item name="buttonBarNegativeButtonStyle">@style/dialog_button.negative</item> 
    <item name="buttonBarPositiveButtonStyle">@style/dialog_button.positive</item> 
</style> 

<style name="dialog_button"> 
    <item name="android:textStyle">bold</item> 
    <item name="android:minWidth">64dp</item> 
    <item name="android:paddingLeft">8dp</item> 
    <item name="android:paddingRight">8dp</item> 
    <item name="android:background">@drawable/dialogButtonSelector</item> 
</style> 

<style name="dialog_button.negative"> 
    <item name="android:textColor">#f00</item> 
</style> 

<style name="dialog_button.positive"> 
    <item name="android:layout_marginLeft">8dp</item> 
    <item name="android:textColor">#00f</item> 
</style> 

Gdzie dialogButtonSelector to nasz niestandardowy selektor do selekcji.

Niefortunnie ustawienie tła na dialog_button zniszczyć nasze klocki i marginesy, więc trzeba ustawić ponownie.

dialog_button styl może dziedziczyć przez Widget.AppCompat.Button.ButtonBar.AlertDialog ale okazało się, że ma brakujących stylów jak textStylebold.

+0

dość późno na przyjęcie odpowiedzi. Za wspaniałą odpowiedź i dobrą pracę. –

2

mam odpowiadać za 3rd pytania
(Jak mogę mieć różne kolory przycisków akcji (jest to możliwe)?)

Kod:

// Initialize AlertDialog & AlertDialog Builder 
AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this); 
builder.setTitle("AlertDialog Title"); 
........... 
......... 
//Build your AlertDialog 
AlertDialog Demo_alertDialog= builder.create(); 
Demo_alertDialog.show(); 

//For Positive Button: 
Button b_pos; 
b_pos=Demo_alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); 
if(b_pos!=null){ 
    b_pos.setTextColor(getResources().getColor(R.color.YourColor)); 
    }  


//For Neutral Button: 
Button b_neu; 
b_neu=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); 
if(b_neu!=null){ 
    b_neu.setTextColor(getResources().getColor(R.color.YourColor)); 
    } 

//For Negative Button: 
Button b_neg; 
b_neg=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); 
if(b_neg!=null){ 
    b_neg.setTextColor(getResources().getColor(R.color.YourColor)); 
    } 

Szczęśliwy Coding :)

+0

to miła próba. Ale chciałem tego w motywie. A zaakceptowana odpowiedź działa dobrze. Chociaż +1 dla wersji kodu. –

+0

Dzięki. Happy Coding :) –

0

AlertDialog.Builder builder = new AlertDialog.Builder (MainActivity.this); builder.setMessage ("Tytuł"); builder.setCancelable (true);

builder.setPositiveButton("OK", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 

      } 
     }); 

builder.setNegativeButton("Cancel", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 

AlertDialog alertdialog = builder.create(); 
alertdialog.show(); 

Button nbutton = alertdialog.getButton(DialogInterface.BUTTON_NEGATIVE); 
nbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); 

Button pbutton = alertdialog.getButton(DialogInterface.BUTTON_POSITIVE); 
pbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); 

     **btn_press_white_rect.xml** 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/rounded_rect_yellow" ></item> 
<item android:state_pressed="false" android:drawable="@drawable/rounded_rect_white" ></item> 
</selector>