如何以编程方式设置 LinearLayout 的宽度?

How to programmatically set the width of the LinearLayout?

是滑块和课程的来源link:

http://www.oodlestechnologies.com/blogs/Facebook-Style-Slide-Menu-In-Android

在这种情况下,文件的宽度"left_menu.xml"决定了TextView (android:layout_width="260dp") 如何根据设备屏幕将宽度设置为"LinearLayout"文件"left_menu.xml"?例如,我希望 "LinearLayout" 的宽度始终是屏幕设备的 1/3?或者以任何方式将 TextView 的宽度设置为设备屏幕宽度的 1/3。

LinearLayout layout = (LinearLayout)findViewById(R.id.ll);
LayoutParams params = (LayoutParams) layout.getLayoutParams();
params.height = 100;
params.width = 100;
LinearLayout linear = (LinearLayout) findViewById(R.id.ll);    
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
linear.setLayoutParams(params);

如您所见,您可以为 LinearLayout.LayoutParams() 构造函数设置整数值,如下所示:

LinearLayout.LayoutParams cellParams = new LinearLayout.LayoutParams(0, 100);   

构造函数需要像素而不是 dp(密度像素),这里有一个从 DP 转换 PX 的公式:

(int) (<numberOfDPs> * getContext().getResources().getDisplayMetrics().density + 0.5f)     

设置设备屏幕的LinearLayoutTextView宽度为1/3:

首先获取设备屏幕宽度:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
try {
    display.getRealSize(size);
} catch (NoSuchMethodError err) {
    display.getSize(size);
}
int width = size.x;
int height = size.y;

现在只需创建一个 LayoutParams 并将其设置为文本:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int)(width/3),
                    LinearLayout.LayoutParams.WRAP_CONTENT); // or set height to any fixed value you want

your_layout.setLayoutParams(lp);
// OR
your_textView.setLayoutParams(lp);
LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout)
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
                    /*width*/ ViewGroup.LayoutParams.MATCH_PARENT,
                   /*height*/ 100,
                   /*weight*/ 1.0f
                    );
                    YOUR_LinearLayout.setLayoutParams(param);

以上回答正确。我只是建议未来的读者看看他们的 xml 布局文件,并确保 LinearLayout 元素没有使用 weight 属性。如果是这样,请考虑更新 LayoutParams 对象中的权重。 另一个好的做法是从您尝试调整的视图中检索布局参数对象,而不是从头开始创建并设置所有值。

最简单的方法,设置layoutParams的值,注意这个尺寸不在DP中。

view.layoutParams.width = 400;
view.layoutParams.height = 150;
view.requestLayout();