Решение проблемы с макетом - PullRequest
0 голосов
/ 01 апреля 2011

как решить проблему с разрешением, если я создаю макет из кода?

Я проверил его на своем телефоне с разрешением 320 x 480, и он выглядит нормально. но когда я тестирую его в телефоне моих друзей (Galaxy S), похоже, что макет не растянулся.

Почему я создаю макет из кода, потому что я не знаю, как разместить кнопки в определенном месте.

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    rLayout = new RelativeLayout(this);//(RelativeLayout)findViewById(R.id.relativeLayout1);
    rLayout.setBackgroundResource(R.drawable.menu_blankscreen);
    InitializeLayout();
    setContentView(rLayout);

}


private void InitializeLayout() {
    ImageButton newGame = new ImageButton(this);
    //newGame.setBackgroundResource(drawable.menu_button_new);
    newGame.setBackgroundResource(R.drawable.menu_button_new_xml);
    newGame.setOnClickListener(newGameClick);
    addView(newGame, 5, 174, 149, 41);

    ImageView continueGame = new ImageView(this);
    continueGame.setBackgroundResource(R.drawable.menu_button_continue_xml);
    continueGame.setOnClickListener(continueClick);
    addView(continueGame, 5, 218, 149, 41);

    ImageView highscore = new ImageView(this);
    highscore.setBackgroundResource(R.drawable.menu_button_highscore_xml);
    highscore.setOnClickListener(highscoreClick);
    addView(highscore, 5, 262, 149, 41);

    ImageView achievement = new ImageView(this);
    achievement.setBackgroundResource(R.drawable.menu_button_achievement_xml);
    achievement.setOnClickListener(achievementClick);
    addView(achievement, 5, 306, 149, 41);

    ImageView option = new ImageView(this);
    option.setBackgroundResource(R.drawable.menu_button_option_xml);
    option.setOnClickListener(optionClick);
    addView(option, 5, 350, 149, 41);

    ImageView quit = new ImageView(this);
    quit.setBackgroundResource(R.drawable.menu_button_quit_xml);
    quit.setOnClickListener(quitClick);
    addView(quit, 5, 395, 149, 41);

    Button btnTest = new Button(this);
    btnTest.setText("Test");
    btnTest.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(StartMenuActivity.this, TestActivity.class);
            startActivity(intent);
        }
    });
    addView(btnTest, 270, 430,50, 50);
}

public void addView(View view, int x, int y, int width, int height) {
    rParam = new RelativeLayout.LayoutParams(width, height);
    rParam.leftMargin = x;
    rParam.topMargin = y;
    rLayout.addView(view, rParam);
}

Я предполагаю, что leftMargin - как x, а topMargin - как y. это зависит от пикселей ??

1 Ответ

1 голос
/ 01 апреля 2011

Вы пытаетесь разместить компоненты пользовательского интерфейса "абсолютно". AbsoluteLayout устарел, и ваша проблема именно в этом причина. Вы можете добиться «идеального» размещения компонентов пользовательского интерфейса для вашего устройства разработки. При запуске на другом устройстве с другой плотностью пикселей или разрешением или ... список можно продолжить, у вас будут проблемы.

Для достижения идеального, «абсолютного» размещения на каждом устройстве это ни практично, ни невозможно. Вы можете сделать ваши компоненты действительно, действительно близкими к идеальному пикселю на большинстве устройств, используя различные макеты и изменяя значения в свойствах. Прочитайте здесь для получения дополнительной информации.

Требуется какое-то усилие, чтобы уловить парадигму, но на самом деле это действительно легко по сравнению со свингом, по крайней мере, для меня это так.

Вот как я думаю для портретного представления: нам нужен LL, чтобы течь сверху вниз, каждый компонент, помещенный внутрь, будет либо выше, либо ниже следующего. Затем нам нужен еще один LL (вложенный), который течет слева направо. Каждый компонент будет размещен сбоку от каждого компонента. Затем вы задаете гравитацию, запас, заполнение и вес в зависимости от того, где вы хотите разместить компонент «относительно» плотности экрана пикселя и размера разрешения. Вот небольшой пример, чтобы показать вам, как это выглядит. Надеюсь, это поможет!

<LinearLayout
      android:layout_width="match_parent"
      android:id="@+id/linearLayout1"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:gravity="center">
      <LinearLayout
          android:layout_width="match_parent"
          android:id="@+id/linearLayout2"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          android:gravity="center">
              <Button android:id="@+id/myButton"
                  style="@style/actionButton"
                  android:onClick="onClickFeature"
                  android:text="@string/title_button"
                  android:drawableTop="@drawable/pic_btn"
                  android:layout_marginBottom="5dip"
                  android:layout_marginTop="5dip"/>
...