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

问题描述 投票:201回答:10

我正在开发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中执行它。

如何在我的片段Java类代码中将paddingTop设置为<LinearLayout>

android android-layout android-emulator android-widget padding
10个回答
457
投票

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

这会将顶部填充设置为padding像素。

如果你想在dp中设置它,你可以做一个conversion

float scale = getResources().getDisplayMetrics().density;
int dpAsPixels = (int) (sizeInDp*scale + 0.5f);

0
投票

在以编程方式填充时,通过将像素转换为Dp来转换为密度相关值。


90
投票

回答你的第二个问题:

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

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

int paddingDp = 25;
float density = context.getResources().getDisplayMetrics().density
int paddingPixel = (int)(paddingDp * density);
view.setPadding(0,paddingPixel,0,0);

希望有所帮助!


83
投票

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

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

它为您进行转换。


13
投票

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

view.setPadding(0,1,20,3);

而且,还有不同类型的填充 -

Padding

PaddingBottom

PaddingLeft

PaddingRight

PaddingTop

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


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);

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

有关更多信息,请参阅:TypedValue.applyDimension Docs


5
投票

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

setPadding(int left, int top, int right, int bottom)

示例:

view.setPadding(2,2,2,2);

5
投票

使用Kotlin和android-ktx库,你可以做到

view.updatePadding(top = 42)

See docs here


2
投票

编写以下代码来设置填充,它可能会帮助您。

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1);
final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams();

layoutparams.setPadding(50,50,50,50);

ApplyPaddingTextView.setLayoutParams(layoutparams);

根据子视图的父布局使用LinearLayout.LayoutParamsRelativeLayout.LayoutParams


1
投票
Context contect=MainActivity.this;
TextView tview=new TextView(context);
tview.setPaddingRelative(10,0,0,0);
© www.soinside.com 2019 - 2024. All rights reserved.