Как я могу установить лучший макет кнопки программно для множественного разрешения - PullRequest
0 голосов
/ 25 января 2012

У меня есть кнопка установки на линейном макете, и я устанавливаю конфигурацию кнопки программно.

buttonEdit = new ArrayList<ButtonData>();
buttonEdit.add(new ButtonData(1, "one", R.drawable.1));
buttonEdit.add(new ButtonData(2, "two", R.drawable.2));
buttonEdit.add(new ButtonData(3, "three", R.drawable.3));
buttonEdit.add(new ButtonData(4, "four", R.drawable.4));
buttonEdit.add(new ButtonData(5, "five", R.drawable.5));

LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
for (ButtonData button : buttonEdit) {
  Button btn = new Button(getApplicationContext());
  btn.setId(button.getButtonID());
  btn.setBackgroundResource(button.getBackgroundResource());
  btn.setOnClickListener(buttonOnclickListener);
  btn.setHeight(56);
  btn.setWidth(48);

  LinearLayout ll = new LinearLayout(getApplicationContext());
  ll.setLayoutParams(lp);
  ll.setOrientation(LinearLayout.VERTICAL);
  ll.setPadding(10, 0, 10, 0);

  btn.setGravity(Gravity.CENTER_HORIZONTAL);
  TextView textLabel = new TextView(getApplicationContext());
  textLabel.setText(button.getButtonName());
  ll.addView(btn);
  ll.addView(textLabel);

  linearLayoutData.put(String.valueOf(button.getButtonID()), ll);
  buttonObject.put(String.valueOf(button.getButtonID()), btn);
}

В списке кода я устанавливаю отступ слева и справа 10. Таким образом, пользователь может видетьОтдельное пространство между кнопками.Таким образом, проблема в том, что когда я устанавливаю приложения в нескольких разрешениях (QVGA, HVGA, WVGA), они располагаются по-разному.В QVGA он шире, а в WVGA он уже.Что я буду делать?

1 Ответ

0 голосов
/ 25 января 2012

Я бы порекомендовал вам использовать макет, определенный в xml, чтобы определить, как объекты будут выглядеть на экране. Когда вы определяете макеты в XML, вы можете использовать логическую единицу dp, которая является интервалом в соответствии с разрешением экрана. Вот так (представьте, что вы определили это в файле с именем button_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="4dp">

    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    android:textSize="16.0sp" />

    <Button android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"/>
</LinearLayout>

Обратите внимание, что единицы измерения dp и dip являются синонимами.

Тогда, если вам нужно добавить еще одну кнопку вместе со всеми этими элементами программно, вы в основном делаете что-то вроде:

LayoutInflater inflater;
inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout linearLayout = (TableLayout) inflater.inflate(R.id.button_layout, null);
linearLayout.findViewById(R.id.line_id).setText("One"); // Or two or three as you wish
main_activity_layout.addView(linearLayout); //adding yet another button

Это только иллюстрация того, как вы используете макет. Вы можете определить макет с нужными вам свойствами, а также программно установить все индивидуальные свойства. Самое главное, что: - Вам легче разобраться в макете - Вы указываете поля, отступы и т. Д. В относительных единицах dp.

РЕДАКТИРОВАТЬ : Если вы действительно настаиваете на том, чтобы это было сделано в коде, здесь - это то, как вы указываете dp программно. Тем не менее, я бы порекомендовал использовать макет как можно больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...