我正在开发Android v2.2应用程序。
我有一个碎片。在我的片段类的onCreateView(…)回调中,我将一个布局膨胀到片段,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.login, null);
return view;
}
上面的膨胀布局文件是(login.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:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Username" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Username" />
</LinearLayout>
我想设置一个paddingTop到上面的<LinearLayout>元素,我想在Java代码中做,而不是在xml中做。
如何设置paddingTop <LinearLayout>在我的片段Java类代码??
步骤1:首先,将填充值作为一个整数。
int padding = getResources().getDimensionPixelOffset(r . dimension .padding);
或者int padding = 16;[使用任何方法]
步骤2:然后为布局分配填充值。
布局。setPadding(padding, padding, padding, padding);
布局。setPadding(padding_left, padding_top, padding_right, padding_bottom);
所有侧面不同的填充可以分配。布局。setPadding(16,10,8,12);
为了删除填充(无填充),设置填充值为0,
layout.setPadding(0, 0, 0, 0);
回答你的第二个问题:
view.setPadding(0,padding,0,0);
就像SpK和Jave建议的那样,将以像素为单位设置填充。可以在dp中通过计算dp值进行设置,如下所示:
int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);
与手动计算相比,使用TypedValue是一种更清晰的转换为像素的方式:
float paddingDp = 10f;
// Convert to pixels
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics());
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);
本质上,TypedValue。applyDimension根据当前设备的显示属性将所需的填充适当地转换为像素。
更多信息见:TypedValue。applyDimension文档。
芬兰湾的科特林;扩展函数
fun Float.px(m: DisplayMetrics!): Int
get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, m).toInt()
...
val pad = 10.0f.px