2015-01-05 7 views
19

Ich habe einen EditText in einem AlertDialog. Es sieht aus wie das.Fügen Sie EditText in Android AlertDialog einen größeren Rand hinzu

enter image description here

sehen, wo es heißt tddjdjck und wie es ziemlich viel eingerückt. Das ist was ich will (ich habe setPadding mit links und rechts auf 50 gesetzt), aber ich möchte auch die blaue Linie darunter eingerückt werden. Wie mache ich das?

Der Code ich benutze ist unten:

  final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity); 
      final EditText input = new EditText(thisActivity); 
      input.setSingleLine(); 
      input.setPadding(50, 0, 50, 0); 

      alert.setTitle("by..."); 
      alert.setMessage("enter the name of the person who did:"); 
      alert.setView(input); 
      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String value = input.getText().toString().trim(); 

       } 
      }); 

      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        dialog.cancel(); 
       } 
      }); 
      alert.show(); 

Danke

+1

statt Polsterung Gebrauch layout_margin von links und rechts –

+0

Machen Sie es wie diese. settext ("Ihr Text \ n \ n"). Einfach und macht den Job –

+0

Welche Funktion kann ich verwenden, um das Layout_margin zu setzen? – b85411

Antwort

53
final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity); 
final EditText input = new EditText(thisActivity); 
input.setSingleLine(); 
FrameLayout container = new FrameLayout(thisActivity); 
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
params.leftMargin = getResources().getDimensionPixelSize(R.dimen.dialog_margin); 
input.setLayoutParams(params); 
container.addView(input); 
alert.setTitle("by..."); 
alert.setMessage("test message"); 
alert.setView(container); 

Achten Sie darauf, eine andere Zeile in dimens.xml Ressourcendatei, wie

<dimen name="dialog_margin">20dp</dimen> 
+0

Danke, das hat es behoben – b85411

+0

Leider haben wir den EditText in ein FrameLayout gepackt, da der Builder die LayoutParams von allem löscht, was über setView hinzugefügt wurde. Kein so teures Geschäft hier, aber Ansichtshierarchien sollten immer so flach wie möglich sein. –

+0

Gibt es einen besseren Weg, als den Rand hart zu codieren? Gibt es in R. eine ähnliche Stilkonstante, so dass der Titelrand und dieser Rand immer gleich bleiben? – Phil

11
hinzufügen

Sie können den Abstandsparameter in setView Methode

übergeben
alert.setView(view ,left_space , top_space , right_space , bottom_space); 

in Ihrem Fall also, können Sie versuchen, diese

alert.setView(input , 50 ,0, 50 , 0); 
+12

Dies ist für neuere APIs – jensbrulmans

+3

@JensBrulmans veraltet, aber es funktioniert immer noch, ohne ein Dutzend zusätzliche Codezeilen hinzuzufügen. – Bolein95

1

Hier ist Kotlin Erweiterungsfunktion für die Builder EditText Ansicht einzustellen.

fun android.support.v7.app.AlertDialog.Builder.setEditText(editText: EditText): AlertDialog.Builder { 

    fun dpToPixel(dp: Float, context: Context): Float { 
     val resources = context.resources 
     val metrics = resources.displayMetrics 
     return dp * (metrics.densityDpi.toFloat()/DisplayMetrics.DENSITY_DEFAULT) 
    } 

    val container = FrameLayout(context) 
    container.addView(editText) 
    val containerParams = FrameLayout.LayoutParams(
      FrameLayout.LayoutParams.MATCH_PARENT, 
      FrameLayout.LayoutParams.WRAP_CONTENT 
    ) 
    val margins = 16F 
    containerParams.topMargin = dpToPixel(margins/2, context).toInt() 
    containerParams.leftMargin = dpToPixel(margins, context).toInt() 
    containerParams.rightMargin = dpToPixel(margins, context).toInt() 
    container.layoutParams = containerParams 

    val superContainer = FrameLayout(context) 
    superContainer.addView(container) 

    setView(superContainer) 

    return this 
} 

Anwendungsbeispiel

val editText = EditText(this) 
editText.hint = "Hint" 
AlertDialog.Builder(this) 
     .setTitle("Title") 
     .setEditText(editText) 
     .setPositiveButton("OK", { _: DialogInterface, _: Int -> 
      // Do your work with text here 
      val text = editText.text.toString() 
      Toast.makeText(applicationContext, text, Toast.LENGTH_SHORT).show() 
     }) 
     .setNegativeButton("Cancel", null) 
     .show() 

Ergebnis

Result

Verwandte Themen