如果我从代码创建布局,如何解决分辨率问题?
我在手机上测试了它,分辨率为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。 是像素依赖??
答案 0 :(得分:1)
您正在尝试“绝对”放置UI组件。 AbsoluteLayout已被折旧,问题正是原因所在。您可以为开发设备实现UI组件的“完美”放置。当它在具有不同像素密度或分辨率的另一台设备上运行时......或者列表继续运行时,您将遇到问题。
要实现完美,每台设备上的“绝对”放置既不实际也不可行。在大多数设备上,您可以使用各种布局并在属性中迭代不同的值,使组件真正,非常接近像素完美。请阅读here以获取更多信息。
需要花一些力气去理解这个范例,但实际上与挥杆相比真的很容易,至少对我来说是这样。
这就是我对纵向视图的看法:我们需要一个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"/>