2016-07-25 14 views
7

Ich habe einen AlertDialog mit einem EditText in meiner Android App erstellt, aber die Standardränder sehen wirklich aus. Ich habe versucht, Ränder festlegen wie folgt:Ränder für EditText in AlertDialog festlegen

android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(SpinActivity.this); 
      builder.setTitle("Edit Spin Tags"); 
      builder.setMessage("(separate tags with commas)"); 

      // set input 
      int margin = 10; 
      final EditText input = new EditText(SpinActivity.this); 
      input.setSingleLine(); 
      input.setText(spinTags.toString().replace("[", "").replace("]", "")); 
      builder.setView(input, margin, 0, margin, 0); 

jedoch aus dem Bild unten, können Sie sehen, dass es nicht die gewünschte Wirkung bewirbt.

enter image description here

Andere Optionen Ich habe versucht, einschließlich der Eingabe in einem Linearlayout platzieren und die Ränder Einstellung mit LayoutParams vor dem Alertdialog im Hinblick auf das Linearlayout einstellen.

Wie stelle ich die Ränder für einen EditText in einem AlertDialog ein?

+0

versuchen, die Lösung aus dieser Antwort http://stackoverflow.com/questions/20761611/how-to-set- edittext-topmargins-in-dp-programmatisch – wanpanman

+0

@wanpanman hat das gerade versucht und es hatte keine Wirkung, leider – scientiffic

Antwort

6

Eigentlich Ihre Lösung funktioniert perfekt, mit der Ausnahme, dass builder.setView(input, margin, 0, margin, 0); Argumente in "Pixel" Werte annimmt. Ein Wert von 20 ist also sehr klein. Verwenden Sie entweder einen höheren Wert für die Marge, z. in den 100ern. oder mit dieser Funktion von dp Pixel

public static int dpToPx(int dp) 
{ 
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density); 
} 

und dann zu konvertieren,

int margin = dpToPx(20); 
+0

perfekt !! Danke, dass du dieses Rätsel für mich gelöst hast. – scientiffic

0

Definieren Sie Ihren Editiertext in einer anderen Layoutdatei, während Sie in diesem Layout die richtigen Ränder festlegen. Füllen Sie das Layout auf und stellen Sie es als Ansicht für den Dialog ein.

2

Sie können eine LinearLayout als übergeordnetes Element der EditText haben. Stellen Sie dann den Rand zum EditText zur Verfügung.

private void createDialog() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Demo"); 
    builder.setMessage("Some demo message"); 
    LinearLayout parentLayout = new LinearLayout(this); 
    EditText editText = new EditText(this); 
    editText.setHint("Some text"); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.MATCH_PARENT); 

    // call the dimen resource having value in dp: 16dp 
    int left = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin)); 
    int top = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin)); 
    int right = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin)); 
    int bottom = getPixelValue((int)getResources().getDimension(R.dimen.activity_horizontal_margin)); 

    // this will set the margins 
    layoutParams.setMargins(left, top, right, bottom); 

    editText.setLayoutParams(layoutParams); 
    parentLayout.addView(editText); 
    builder.setView(parentLayout); 
    builder.setPositiveButton("OK", null); 
    builder.create().show(); 
} 

private int getPixelValue(int dp) { 
    Resources resources = getResources(); 
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
      dp, resources.getDisplayMetrics()); 
} 

Weitere Sie besuchen können http://www.pcsalt.com/android/set-margins-in-dp-programmatically-android/

+0

Danke für den Vorschlag, aber das hat keine Wirkung – scientiffic

+0

Es funktioniert für mich. Vielen Dank. – ACAkgul

Verwandte Themen