我的活动布局有3个主要部分:标题,图片和文章。我试图强制标题为屏幕的15%,图片为屏幕的35%,文章文本为50%。出于某种原因,这篇文章有时会占用更多空间,有时甚至会占用更多空间。有没有办法强制尺寸?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Headline" />
<ImageView
android:id="@+id/picture"
android:layout_width="fill_parent"
android:layout_height ="wrap_content"
android:layout_weight = "35"/>
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight = "50">
<TextView
android:id="@+id/storydata"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Story Data" />
</ScrollView>
答案 0 :(得分:2)
我的情况几乎和你一样,最后放弃尝试从资源文件中使用xml布局。不知道我花了多少时间摆弄xml,试图让百分比正确排列,取得了一些成功但不是我真正想要的。
所以我最终决定在主要活动中以编程方式自己创建布局,结果很好......
我的布局是3部分。我在顶部有一个公司徽标/图像,我想占据屏幕的20%。
在中间部分,我有一个带有文件名的scrollarea。文件列表可以向上和向下滚动,也可以从左向右滚动。我希望这个区域占屏幕的75%。
第3部分只是一个提交按钮,它进行异步调用以刷新中间部分的文件列表,它应该是屏幕的5%。
所以,这是代码......
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Resources res = this.getResources(); // Load the resources
// Get available screen size
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setId(topLayout);
layout.setBackgroundColor(0xff000000);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
layout.setLayoutParams(lp);
double logoHeight = screenHeight * .20;
logoHeight = Math.round(logoHeight);
Bitmap logoImg = BitmapFactory.decodeResource(res, R.drawable.standardlogo);
logoImg = Bitmap.createScaledBitmap(logoImg, screenWidth, (int)logoHeight, true);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(logoImg);
imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout.addView(imageView);
double bottomHeight = screenHeight * .05;
bottomHeight = Math.round(bottomHeight);
int scrollAreaHeight = screenHeight - (int)logoHeight - (int)bottomHeight - topHeight;
ScrollView scroll = new ScrollView(this);
scroll.setBackgroundColor(0xffd8d8d8);
LinearLayout.LayoutParams slp = new LinearLayout.LayoutParams(screenWidth, scrollAreaHeight);
scroll.setLayoutParams(slp);
layout.addView(scroll);
HorizontalScrollView hScroll = new HorizontalScrollView(this);
hScroll.setBackgroundColor(0xffd8d8d8);
LinearLayout.LayoutParams hlp = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
hScroll.setLayoutParams(hlp);
scroll.addView(hScroll);
TextView tv = new TextView(this);
tv.setId(textArea);
LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lparams);
tv.setTypeface(Typeface.MONOSPACE);
tv.setText("");
hScroll.addView(tv);
Button btn = new Button(this);
btn.setId(sendButton);
btn.setOnClickListener(sendBtnListener);
ViewGroup.LayoutParams blp = new ViewGroup.LayoutParams(screenWidth, LayoutParams.WRAP_CONTENT);
btn.setLayoutParams(blp);
btn.setText("List Import Directory");
layout.addView(btn);
setContentView(layout);
}
这是相当多的代码,但它完全符合我的要求,它适用于我测试过的所有屏幕尺寸。我只为应用程序提供了一个公司徽标png图像,这是一个10英寸平板电脑的大图像。
注意:topHeight的值硬编码为100,适用于我测试过的所有设备。它是屏幕顶部的动作或状态栏的高度,并且因设备而异,因此我将其设置为100以处理最多两个48像素的条形图。如果只有一个,它会在屏幕底部留下一些未使用的空间吧,但它很小。