3

Ich versuche, ein Benachrichtigungs Dialog Box wie Lollipop zu schaffen, wird gut alles, aber ich bin in einem Abschnitt, den Fall von stecken EditTextAndroid: Set Margin für Text bearbeiten in Alertdialog Box

Ich möchte ein EditText mit Unterstreichung und Marge links und rechts mit 20dp.Für Unterstreichen versuchte ich setBackground(), und es funktioniert gut.

Aber es gibt ein Problem, das setBackground() nicht API Stufe unter 16

Für setMargin I

final EditText input = new EditText(MainActivity.this); 
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 
    lp.setMargins(30,0,30,0); 
    input.setLayoutParams(lp); 
    input.setGravity(View.TEXT_ALIGNMENT_GRAVITY); 
    input.setBackground(getResources().getDrawable(R.drawable.edit_text_line)); 
    builder.setView(input); 

Aber Text bearbeiten und mit voller Mutter Breite versucht arbeiten.

vollständiger Code

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Message"); 
    builder.setMessage("Do you want to\n"+""+"exit from app"); 

    final EditText input = new EditText(MainActivity.this); 
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 
    lp.setMargins(30,0,30,0); 
    input.setLayoutParams(lp); 
    input.setGravity(View.TEXT_ALIGNMENT_GRAVITY); 
    input.setBackground(getResources().getDrawable(R.drawable.edit_text_line)); //call reequires api 16 and above 
    builder.setView(input); 

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

    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      Toast.makeText(MainActivity.this, "You exit from app " + input.getText().toString(), 
        Toast.LENGTH_LONG).show(); 

     } 
    }); 

    AlertDialog alert = builder.create(); 
    alert.show(); 
    Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE); 
    nbutton.setTextColor(Color.parseColor("#7e7e7e")); 
    Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE); 
    pbutton.setTextColor(Color.parseColor("#109c8f")); 

Gibt es eine Möglichkeit, den Hintergrund für die EditText, die unter API 16 und setMargin arbeiten zu setzen links und rechts für die EditText.

+0

Eine Abhilfe für die Margin-Ding kann eine lineare Layout und Satz sein hinzufügen links und rechts padding zu diesem Layout. Lege deinen Edittext in dieses lineare Layout, anstatt es direkt in den Dialog zu stellen. –

+0

versuchen Sie es mit ViewGroup.MarginLayoutParams .. !!! –

+0

@Binil S sehe meine Antwort unten. –

Antwort

5

Ränder in der Stammansicht funktioniert nicht. Versuchen Sie, wie in anderen Antworten beschrieben, dem übergeordneten Layout eine Füllung hinzuzufügen.
Aber anstatt Dialog-Layout in Java erstellen, würde ich empfehlen Ihnen eine XML-aufzublasen und AppCompatEditText verwenden, wenn Sie Linie Hintergrund für Sie bekommen
Hier ist ein Beispielcode verwenden möchten

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Message"); 
// Why are you setting message here when you are inflating custom view? 
// You need to add another TextView in xml if you want to set message here 
// Otherwise the message will not be shown 
// builder.setMessage("Do you want to\n"+""+"exit from app"); 
View view = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null); 
final AppCompatEditText input = (AppCompatEditText) view.findViewById(R.id.editText); 
builder.setView(view); 
builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     dialog.cancel(); 
    } 
}); 

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     Toast.makeText(MainActivity.this, "You exit from app " + input.getText().toString(), 
       Toast.LENGTH_LONG).show(); 

    } 
}); 

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

Schließlich kann man nicht Schaltflächen sofort nach dem Erstellen des Dialogfelds. Sie müssen dies in OnShowListener tun, wenn Sie Schaltflächen Textfarben anpassen möchten. Oder verwenden Sie android.support.v7.app.AlertDialog für neuere Dialog-Designs.

Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE); 
// will be null 
// nbutton.setTextColor(Color.parseColor("#7e7e7e")); 
Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE); 
// will be null 
// pbutton.setTextColor(Color.parseColor("#109c8f")); 

dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:app="http://schemas.android.com/apk/res-auto" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <android.support.v7.widget.AppCompatEditText 
     android:id="@+id/editText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_margin="16dp" 
     app:backgroundTint="@color/colorPrimary"/> 

</LinearLayout> 
1

Mit diesem Code funktioniert es für mich.

 final EditText input = new EditText(MainActivity.this); 
    input.setSingleLine(); 
    FrameLayout container = new FrameLayout(thisActivity); 
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

    params.topMargin = convertDpToPx(30); 
    params.bottomMargin = convertDpToPx(30); 

    input.setLayoutParams(params); 
    container.addView(input); 
+0

Wenn Sie innerhalb eines AlertDialogs verwenden, vergessen Sie nicht, den Container als VIEW für den alertDialog hinzuzufügen: - alertDialog.setView (container); –

Verwandte Themen