Нежелательное заполнение вокруг кнопок в диалоговом окне

#android #button #layout #dialog #padding

#Android #кнопка #макет #диалоговое окно #заполнение

Вопрос:

Проблема:

Нежелательное заполнение

Вы можете четко видеть заполнение вокруг кнопки

Код:

 public void startGameDialog(){

    Context context = GameBoardActivity.this;

    ContextThemeWrapper ctw = new ContextThemeWrapper(context, R.style.AppBaseTheme);

    AlertDialog.Builder startGameDialog = new AlertDialog.Builder(ctw);
    startGameDialog.setTitle(getResources().getString(R.string.whats_your_name));

    LinearLayout dialogLayout = new LinearLayout(context);

        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

        dialogLayout.setOrientation(LinearLayout.VERTICAL);

        final EditText newName = new EditText(context);
        newName.setLayoutParams(params);

        newName.setText("");

        final Button submit = new Button(context);
        submit.setText(getString(R.string.done));
        submit.setLayoutParams(params);

    dialogLayout.addView(newName);
    dialogLayout.addView(submit);

    startGameDialog.setView(dialogLayout);
    final Dialog dialog = startGameDialog.create();

    OnClickListener onClick = new OnClickListener() {

        @Override
        public void onClick(View v) {
            GameBoardActivity.NAME = newName.getText().toString();
            dialog.dismiss();
            setUpPlayers();

        }
    };
    submit.setOnClickListener(onClick);     

    dialog.show();
    dialog.setCancelable(false);        

}
  

Попытки решения (оба неудачные):

  1. Использование метода builder .create() для сборки AlertDialog и настройки .setView(dialogLayout, 0, 0, 0, 0) .

  2. Удаление родительского заполнения путем попытки ViewGroup parent = (ViewGroup) dialogLayout.getParent() , а затем попытки parent.setPadding(0, 0, 0, 0); (это вернуло NullPointerException ошибку, потому что вы не можете установить заполнение для Dialog nor AlertDialog .

Есть еще идеи !?

Заранее спасибо!

JRad плохой

Ответ №1:

Кнопка по умолчанию в Android имеет естественное заполнение. Вы можете удалить его, изменив фон или стиль в XML-макете.

Комментарии:

1. Чем вы можете поделиться XML-макетом для этого всплывающего диалогового окна?

2. Я собираюсь дважды подтвердить это, но я считаю, что это неверно.

3. Для этого нет XML. Все, что вы видите в диалоговом окне, генерируется с помощью Java выше.

4. Затем вы можете использовать submit.setBackground(context.getResources().getDrawable(R.id.YOUR_DRAWABLE));

5. @JRadtheBad Этот ответ правильный. Это не фактическое заполнение, это прозрачные пиксели в фоновом растровом изображении. Смотрите, например btn_default_normal_holo_dark.9.png . Вы должны предоставить новый фон, если хотите, чтобы он был другим, но имейте в виду, что вам, вероятно, также понадобятся варианты selected, disabled и c.

Ответ №2:

Установите минимальную высоту и минимальную ширину на «0», после чего заполнение будет удалено, например

 submit.setMinHeight(0);
  

Ответ №3:

Итак, я нашел другое решение: имейте в виду, это может привести к поломке, если 9 изображений исправлений в SDK будут изменены в будущем, но в противном случае удаление заполнения изображений 9Patch работает без проблем и работает со всеми API. Вот код, который я изменил:

     //set to compensate for 9 patch padding on button
    dialogLayout.setPadding(-5, 5, -5, -8);
    //set to compensate for dialogLayout padding affecting the EditText view
    FrameLayout editTextWrapper = new FrameLayout(context);
    editTextWrapper.addView(newName);
    editTextWrapper.setPadding(5, 0, 5, 0);

    dialogLayout.addView(editTextWrapper);
    dialogLayout.addView(submit);
  

Комментарии:

1. Предупреждение: эти жестко заданные значения (в пикселях) будут отключены на устройствах с плотностью, отличной от той, на которой вы тестируете. Вероятно, вместо этого вы захотите исправить dp значения и преобразовать их в пиксели во время выполнения.

2. Ха-ха, хорошо, что я сказал вам, что есть много вариантов, хотя я не буду рекомендовать это так, как говорит @matiash. обратите внимание, что эти ресурсы находятся в 9 изображениях исправлений с заполнением пикселей, которое растягивается в зависимости от плотности экрана. : p