Android AlertDialog avec des coins arrondis
J'ai essayé de faire de mon boîte de Dialogue d'Alerte, avec des coins arrondis mais de toute façon je ne suis pas en mesure de. J'ai essayé et j'ai échoué. J'ai essayé de suivre ce blog http://blog.stylingandroid.com/archives/271 et fait mon style que.
Btw, pour ajouter à ma question maintenant. Certains de ma nouvelle découverte. Le code dans le lien ci-dessus fonctionne bien sur 2.3.3 (GO) mais ne fonctionne pas du tout dans ICS . Quelques modifications du code de la rupture.
Je veux éviter de créer 9 patch images et donc je suis en utilisant des formes. 9 patch de l'image est la dernière chose que je vais essayer.Je sais que android dialogue alerte de style à l'aide de 9 patch de l'image. J'ai déjà regardé que jusqu'avant de jeter cette question.
/res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@android:style/Theme.Dialog">
<item name="android:alertDialogStyle">@style/dialog</item>
</style>
</resources>
/res/values/styles.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="AppTheme" parent="android:Theme.Light" />
<style name="myImageView">
<!-- 3dp so the background border to be visible -->
<item name="android:padding">3dp</item>
<item name="android:background">@drawable/image_drawable</item>
<item name="android:scaleType">fitCenter</item>
</style>
<style name="dialog">
<item name="android:fullDark">@drawable/dialog_body</item>
<item name="android:topDark">@drawable/dialog_title</item>
<item name="android:centerDark">@drawable/dialog_body</item>
<item name="android:bottomDark">@drawable/dialog_footer</item>
<item name="android:fullBright">@drawable/dialog_body</item>
<item name="android:centerBright">@drawable/dialog_body</item>
<item name="android:topBright">@drawable/dialog_title</item>
<item name="android:bottomBright">@drawable/dialog_footer</item>
<item name="android:bottomMedium">@drawable/dialog_footer</item>
<item name="android:centerMedium">@drawable/dialog_body</item>
</style>
</resources>
/res/drawable/dialog_title.xml
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetBottom="-1dp">
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="5dp" android:topRightRadius="5dp" />
<stroke android:color="#FFFFFF" android:width="1dp" />
</shape>
</inset>
/res/drawable/dialog_body.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#FFFFFFFF" android:endColor="#FFFFFFFF"
android:angle="270" />
</shape>
/res/drawable/dialog_footer.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#FFFFFF" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp" />
<stroke
android:width="1dp"
android:color="#FFFFFF" />
</shape>
res/layout/dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="45dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="90dp"
android:layout_toLeftOf="@+id/textView1"
android:background="@drawable/button_selector"
android:text="Ok"
android:textColor="@android:color/white"
android:textStyle="bold" />
<Button
android:id="@+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/button1"
android:layout_marginRight="48dp"
android:background="@drawable/button_selector"
android:text="More"
android:textColor="@android:color/white"
android:textStyle="bold" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/button1"
android:layout_marginTop="41dp"
android:orientation="vertical" >
</LinearLayout>
</RelativeLayout>
Mon code pour AlertDialog:
public static void createYesNoDialog(final Context context, String positivebuttonname,
String negativebuttonname, String message, int messagedrawable, String headermessage,
final DialogResponse dr) {
final DialogResponse dialogResponse = dr;
ContextThemeWrapper ctw = new ContextThemeWrapper(context,
com.gp4ever.worldlogo.quiz.R.style.MyTheme);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
LayoutInflater inflater = (LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(com.gp4ever.worldlogo.quiz.R.layout.dialog_layout, null);
TextView text = (TextView)layout.findViewById(com.gp4ever.worldlogo.quiz.R.id.textView1);
Button buttonOk = (Button)layout.findViewById(com.gp4ever.worldlogo.quiz.R.id.button1);
Button buttonMore = (Button)layout.findViewById(com.gp4ever.worldlogo.quiz.R.id.button2);
text.setText(message);
if (messagedrawable > 0) {
text.setCompoundDrawablesWithIntrinsicBounds(messagedrawable, 0, 0, 0);
} else if (messagedrawable == 0)
text.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
builder.setView(layout);
builder.setCancelable(false);
builder.setTitle(headermessage);
builder.setIcon(android.R.drawable.ic_dialog_alert);
final AlertDialog dialog = builder.create();
buttonOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
dialog.cancel();
}
});
buttonMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
dialog.cancel();
}
});
}
Ma courant de sortie:
Je ne reçois pas tout les coins arrondis. Je peux voir qu'il est différent de l'habituel style. Même si je change de rayon sur mon drawable, les coins à ne pas réfléchir à ces changements.
- Pouvez-vous ne pas utiliser un 9 patch image comme arrière-plan qui a des coins arrondis?
- Non, je veux éviter de créer 9 patch images et d'utiliser plutôt des formes. 9 patch image la dernière chose que je vais essayer. Permettez-moi de préciser que dans ma question ainsi.
- Je sais que android dialogue alerte de style à l'aide de 9 patch de l'image. J'ai déjà regardé que jusqu'avant de les jeter à cette question.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire en utilisant le code suivant:
CustomDialog.java:
dialog_title.xml
dialog_footer.xml
Il suffit de changer le radius montant:
dialog_title.xml
et
dialog_footer.xml
et qui va générer le résultat suivant:
espère que cela va vous aider.
Mise à JOUR:
Je ne suis pas un expert mais c'est ce que j'ai trouvé. Il peut être de bonne ou de mauvaise.
Après de nombreuses tentatives j'ai fini par le suivant:
1-
ContextThemeWrapper
n'est pas applicable pour l'API 14, il fonctionne très bien sur pain d'épice et les anciennes versions, mais avec l'API > 10 il ne fonctionne pas.2 - pour surmonter le problème ci-dessus, et de le faire fonctionner sur l'API > 10 comme demandé, j'ai remplacer cette ligne:
avec ceci:
mais vous avez besoin de changer:
à
le résultat sera comme illustré dans l'image suivante sur ICS (API 14):
Cette image est à partir d'un Samsung Galaxy S3 sous ICS.
Remarque: la modification du projet initié avec l'API 14 DONC manifeste sdk sera:
MOT DE LA FIN:
Comme mon peu de connaissances en développement Android (je ne suis pas un expert),
1 - personnalisé boîte de dialogue d'alerte fonctionne bien dans l'API < 10, mais pas de > 10 avec le même code Java,
si nous voulons exécuter dans ICS avec le même effet que paru dans l'API < 10, nous avons besoin de modifier le code, donc il fonctionnera sur ICS, mais ne sera pas exécuter dans la version en bas de l'API 11.
2 - même le résultat dans ICS n'est pas satisfaisante, l'arrondi s'applique uniquement pour le titre, mais pas le pied de page.
DEUXIÈME MISE À JOUR:
ENFIN je reçois tous les coins ronds,
Il suffit d'appliquer
padding
àdialog_footer.xml
comme suit:De l'image de sortie:
Cette image est à partir d'un Samsung Galaxy S3 sous ICS.
Qu'une étape de plus à partir de @iDroid Explorer réponse
ajouter cette ligne lorsque vous générez la boîte de dialogue
et le rectangle disparaître (ce qui est transparente) et d'obtenir un arrondi parfait de la boîte de dialogue.
J'ai essayer le même problème avec en dessous d'un et cela fonctionne pour moi. Même pour ICS également.
1. D'abord, j'ai mis le thème de mon AlertDialog.
2. Puis ont mis en œuvre la Mise en page Personnalisée de la boîte de Dialogue afficher
pop_exit.xml
3. Maintenant ajouter une forme à l'arrière-plan de parent disposition de pop_exit.xml
round.xml //fichier de forme
Je viens de le faire. Ça fonctionne pour vous aussi pour ICS.
Espère que ça va vous aider. Si non, alors laissez-moi savoir.
Profiter De Codage...
🙂
Comme vous le dites, vous ne voulez pas utiliser un 9 patch de l'image, regardez ici.
https://stackoverflow.com/a/1683195/940834
Le principe est exactement le même, sauf que vous attribuez à l'arrière-plan à votre disposition où cet exemple est d'un linéaire de la mise en page.
créer xml dans le dossier drawable avec dialog_corner.
2.mis dans la disposition
android:background="@drawable/dialog_corner"
3.dans vous fichier java garder le code ci-dessous