【问题标题】:How can I set layout height and width programmatically which support all screen size in Android?如何以编程方式设置支持 Android 中所有屏幕尺寸的布局高度和宽度?
【发布时间】:2020-08-15 02:02:11
【问题描述】:

我想以编程方式设置支持所有屏幕尺寸的 textview 高度和宽度。

这是我的 activity.xml,其中有两个 LinearLayout。在第二个布局中,我动态放置了多个 textview 超过 10 或 12 个。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:orientation="horizontal"
    tools:context="com.example.sagargajera.setballs.MainActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="6">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_balls"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_gravity="center"
        android:orientation="horizontal"
        android:background="#3F51B5"
        android:layout_weight="1">

        <!--Here I tried to put layout and inside this layout I want to put textview. -->
    </LinearLayout>
</LinearLayout>

这是我的 MainActivity.java,我在其中尝试根据我的循环创建布局和文本视图。

package com.example.sagargajera.setballs;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    LinearLayout layout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        layout=(LinearLayout)findViewById(R.id.layout_balls);

//        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
//        int width = displayMetrics.widthPixels;
//        int height = displayMetrics.heightPixels;

        for(int i=1;i<=12;i++){
//            LinearLayout.LayoutParams param1=new LinearLayout.LayoutParams(width, (height/7));
            LinearLayout.LayoutParams param1=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
            LinearLayout layout_1=new LinearLayout(this);
            layout_1.setOrientation(LinearLayout.HORIZONTAL);
            layout_1.setLayoutParams(param1);
            layout_1.setGravity(Gravity.CENTER);
            layout_1.setBackgroundColor(Color.parseColor("#f32f32"));

            LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20,20);
            param1.weight=1;
            TextView tv=new TextView(this);
            tv.setGravity(Gravity.CENTER);
            tv.setLayoutParams(params);
            tv.setText("" + i);
            tv.setBackgroundDrawable(getResources().getDrawable(R.drawable.cicle));
            tv.setTextColor(Color.parseColor("#FFFFFF"));

            layout_1.addView(tv);
            layout.addView(layout_1);
        }
    }
}

这是我的截图:

上面创建布局和文本视图的代码。在动态布局中设置了一个 Textview,在我的 xml 特定布局(即 layout_balls)中设置了动态布局。

问题是当我在小型设备上运行这个应用程序时,它给了我完美的输出,但是当我在大型设备或平板电脑上运行这个应用程序时,输出却出乎意料。

【问题讨论】:

    标签: android


    【解决方案1】:

    你可以像这样得到设备密度:

    float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * scaledDensity,20 * scaledDensity);
            param1.weight=1;
    

    【讨论】:

      【解决方案2】:

      下面的帖子有一些小的变化。

      float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
      LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * scaledDensity,20 * scaledDensity);
              param1.weight=1;
      

      唯一的变化是我们需要将 float 转换为 int,所以在下面使用:

      float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
          LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20 * (int)scaledDensity,20 * (int)scaledDensity);
                  param1.weight=1;//This is the correct answer.
      

      【讨论】:

        猜你喜欢
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-11
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多