我正在开发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类代码??


当前回答

如果将填充存储在资源文件中,则可以简单地调用

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

它会帮你转换。

其他回答

使用Kotlin和android-ktx库,您可以简单地做到

view.updatePadding(top = 42)

点击这里查看文档

如果将填充存储在资源文件中,则可以简单地调用

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

它会帮你转换。

view.setPadding(0,填充,0,0);

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

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

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

在这里你可以看到在哪个部分应用了填充

bidding.subHeader.tvSubHeader.setPadding(0, 5, 0, 0);

有人编辑了这个答案,但我添加了一张之前被删除的图像,这里又出现了

    binding.appBarMain.toolbar.setOnApplyWindowInsetsListener { _, insets ->
        val statusBarSize: Int =
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
                insets.getInsets(WindowInsets.Type.systemBars()).top
            } else {
                insets.systemWindowInsetTop
            }
        binding.appBarMain.appBarLayout.setPadding(0, statusBarSize, 0, 0)
        return@setOnApplyWindowInsetsListener insets
    }