3

Я пытаюсь создать оповещения Dialog окно как леденец, все идет хорошо, но я застрял в одном разделе случай EditTextAndroid: Установка Маржа для редактирования текста в AlertDialog Box

Я хочу EditText с подчеркиванием и маржа слева и справа с 20dp.For подчеркивание Я пробовал setBackground(), и его работающий штраф.

Но есть проблема, которая setBackground() не будет работать API уровень ниже 16.

Для setMargin Я попытался

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); 

Но Edit Text, используя всю ширину родительского.

Полный код

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")); 

Есть ли способ, чтобы установить фон для EditText, которые работают ниже API 16 и setMargin влево и вправо для EditText.

+0

Один из способов для маржинальной вещь может быть добавить линейное расположение и набор левый и правый отступы для этой схемы. поместите ваш edittext внутри этой линейной очереди, а не помещайте ее непосредственно в диалог. –

+0

попробуйте использовать ViewGroup.MarginLayoutParams .. !!! –

+0

@ Binil S см. Мой ответ ниже. –

ответ

5

Поля в виде корня не будут работать. Попробуйте добавить дополнение к родительскому макету, как сказано в других ответах.
Но вместо того, чтобы создать диалоговое окно макета в Java, я бы посоветовал вам надуть XML-и использовать AppCompatEditText, если вы хотите использовать линейный фон
Вот пример кода для вас

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(); 

Наконец вы можете не получить сразу после создания диалога. Вам нужно сделать это в OnShowListener, если вы хотите настроить цвета текста кнопок. Или используйте android.support.v7.app.AlertDialog для новых дизайнов Dialog.

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

Используйте этот код, чтобы он работал для меня.

 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

При использовании внутри AlertDialog не забудьте добавить контейнер как VIEW для alertDialog: - alertDialog.setView (контейнер); –

Смежные вопросы