以编程方式在视图上添加填充

Lee*_*fin 221 android padding android-widget android-emulator android-layout

我正在开发Android v2.2应用程序.

我有一个片段.

onCreateView(...)我的片段类的回调中,我将布局扩展到片段,如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.login, null);

    return view;
}
Run Code Online (Sandbox Code Playgroud)

上面膨胀的布局文件是(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>
Run Code Online (Sandbox Code Playgroud)

我想设置一个paddingTop上面的<LinearLayout>元素,我想在Java代码中执行它而不是在xml中执行它.

如何设置paddingTop<LinearLayout>我的片段Java类代码?

Jav*_*ave 466

view.setPadding(0,padding,0,0);

这会将顶部填充设置为padding-pixels.

如果您想将其设置为,dp则可以进行转换:

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);
Run Code Online (Sandbox Code Playgroud)

  • @Georg代码来自这里:http://developer.android.com/guide/practices/screens_support.html#dips-pels 0.5用于在转换时获得最接近的整数(而不是使用Math.round() ) (9认同)
  • 0.5f来自哪里? (7认同)
  • 克里斯说,@ Leem.fin,它是像素.如果你想要dp,你必须手动进行转换:`float scale = getResources().getDisplayMetrics().density;``int size =(int)(sizeInPx*scale + 0.5f);` (6认同)

Chr*_*way 93

回答你的第二个问题:

view.setPadding(0,padding,0,0);
Run Code Online (Sandbox Code Playgroud)

像SpK和Jave建议的那样,将以像素为单位设置填充.您可以通过计算dp值在dp中设置它,如下所示:

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

  • 当然,这将按预期编译和工作,但为了清楚起见,您应该切换int变量的命名.因为您在DP中定义填充并计算此给定设备的像素值. (3认同)

Mik*_*kab 87

如果将填充存储在资源文件中,则只需调用即可

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);
Run Code Online (Sandbox Code Playgroud)

它为您进行转换.


Pra*_*mar 13

您可以在下面的代码中通过编程方式将填充设置为您的视图 -

view.setPadding(0,1,20,3);
Run Code Online (Sandbox Code Playgroud)

此外,还有不同类型的填充 -

填充

paddingBottom来

PaddingLeft

PaddingRight

PaddingTop

这些链接将引用Android开发者网站.希望这对你有所帮助.


And*_*tor 9

使用Kotlin和android-ktx库,您只需

view.updatePadding(top = 42)
Run Code Online (Sandbox Code Playgroud)

在这里查看文档


i20*_*97i 8

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);
Run Code Online (Sandbox Code Playgroud)

实质上,TypedValue.applyDimension根据当前设备的显示属性,将所需的填充转换为适当的像素.

有关详细信息,请参阅:TypedValue.applyDimension Docs.


Gas*_*lén 7

在这里您可以看到填充应用于哪个部分

bidding.subHeader.tvSubHeader.setPadding(0, 5, 0, 0);
Run Code Online (Sandbox Code Playgroud)

有人编辑了这个答案,但我添加了之前已删除的图像,这里又来了

在此输入图像描述


Sai*_*i N 6

使用以下方法动态设置填充

setPadding(int left, int top, int right, int bottom)
Run Code Online (Sandbox Code Playgroud)

示例:

view.setPadding(2,2,2,2);
Run Code Online (Sandbox Code Playgroud)


小智 5

步骤1:首先,将填充值取为整数。

int padding = getResources().getDimensionPixelOffset(R.dimen.padding);

int padding = 16;[使用任何方法]

步骤2:然后将padding值分配给布局。

layout.setPadding(padding, padding, padding, padding);

布局.setPadding(padding_left, padding_top, padding_right, padding_bottom);

可以分配所有边不同的填充。layout.setPadding(16, 10, 8, 12);

删除填充(无填充),请将填充值设置为 0,

layout.setPadding(0, 0, 0, 0);