#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);
}
Попытки решения (оба неудачные):
-
Использование метода builder
.create()
для сборкиAlertDialog
и настройки.setView(dialogLayout, 0, 0, 0, 0)
. -
Удаление родительского заполнения путем попытки
ViewGroup parent = (ViewGroup) dialogLayout.getParent()
, а затем попыткиparent.setPadding(0, 0, 0, 0);
(это вернулоNullPointerException
ошибку, потому что вы не можете установить заполнение дляDialog
norAlertDialog
.
Есть еще идеи !?
Заранее спасибо!
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