【问题标题】:Android Aspect Ratio of ButtonAndroid 按钮的宽高比
【发布时间】:2015-03-02 01:55:18
【问题描述】:

我使用以下内容在布局中显示按钮

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="0.2"
    android:gravity="bottom|right"
    android:orientation="vertical" >

    <TableRow
                android:id="@+id/tableRow3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="right" >

        <Button
            android:id="@+id/clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dip"
            android:background="@drawable/butt2"
            android:onClick="clk_clear"
            android:scaleType="centerInside"
            android:textColor="#000000"
            android:textSize="50dp" />

    </TableRow>

   </LinearLayout>

这会将布局设置为可用高度的 20%,并在其中放置一个按钮

问题是当屏幕的 20% 小于图标的高度时,垂直挤压它但不保持纵横比,所以一个圆最终看起来像一个椭圆

更新

我尝试了以下方法,但它崩溃了,说它无法转换为

 android.widget.TableRow$LayouParams

任何想法

Button txt1 = (Button) findViewById(R.id.clear);  
    int btnSize=txt1.getLayoutParams().width;
    txt1.setLayoutParams(new LayoutParams(btnSize, btnSize));

也试过了

    Button txt1 = (Button) findViewById(R.id.clear);  
    int btnSize=txt1.getHeight();
    txt1.setWidth(btnSize);

看起来还是一个椭圆形

已解决,但图标非常小需要与线条大小相同 标记

【问题讨论】:

  • 根据文档,要创建不同密度的图标,您应该遵循五个主要密度(中、高、x-高、 xx-high 和 xxx-high 分别)。你在关注这个吗?尝试按照上述方法使用不同大小的图标
  • 你的意思是我必须把 png 缩小到每个文件夹中的相关大小吗?我的 png 在名为 res/drawable 的文件夹中,而不是在相应的文件夹中
  • 是的,例如在 xhdpi 文件夹中放置 96x96,在 hdpi 文件夹中放置 72x72 图像,同名。
  • 您在哪个设备上进行测试,或者您使用哪个模拟器 dpi?
  • nexus 10 模拟器和 Galaxy Note 10。平板电脑都有四屏,但试图让图标在所有屏幕上的比例相同

标签: android button scale aspect-ratio


【解决方案1】:

好的,伙计们,我不知道该怎么做,所以我有一个解决方法。我使用以下代码来检测应用程序安装在什么尺寸的屏幕上,然后根据它是手机、平板手机还是平板电脑运行不同的 xml 布局

不是一个完美的解决方案,但除非有人可以帮助我解决这个问题,否则这是我能想到的最好的解决方案

   DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int widthPixels = metrics.widthPixels;
    int heightPixels = metrics.heightPixels;
    String Textsize = String.valueOf(widthPixels) + " x " + String.valueOf(heightPixels);
    float scaleFactor = metrics.density;
    float widthDp = widthPixels / scaleFactor;
    float heightDp = heightPixels / scaleFactor;
    String Textsize2 = String.valueOf(widthDp) + " x " + String.valueOf(heightDp);
    float smallestWidth = Math.min(widthDp, heightDp);
    float widthDpi = metrics.xdpi;
    float heightDpi = metrics.ydpi;
    float widthInches = widthPixels / widthDpi;
    float heightInches = heightPixels / heightDpi;
    double diagonalInches = Math.sqrt(
            (widthInches * widthInches) 
            + (heightInches * heightInches));

    if (diagonalInches >= 10) {
        //Toast.makeText(getBaseContext(), "Tablet", Toast.LENGTH_LONG).show();
        setContentView(R.layout.mainactivity2);
    } 
    if (diagonalInches >= 5 && diagonalInches <=9){
        //Toast.makeText(getBaseContext(), "Phablet", Toast.LENGTH_LONG).show();
        setContentView(R.layout.mainactivity);
    } 
    if (diagonalInches <= 5) {
        //Toast.makeText(getBaseContext(), "Phone", Toast.LENGTH_LONG).show();
        setContentView(R.layout.mainactivity3);
    } 

【讨论】:

    【解决方案2】:

    您没有根据文档使用图标或图像。由于您的目标是平板电脑,因此它们可能属于 HDPI、XHDPI 或 XXHDPI。确保在不同大小的相应资源文件夹中具有相同名称的相同图像。

    一般资源文件夹结构如下

    您可以在此阅读更多内容 http://developer.android.com/design/style/iconography.html

    文档清楚地说,

    当您的应用运行时,Android 会检查设备屏幕的特征并为您的应用加载适当的密度特定资产。要为不同的密度创建图标,您应该遵循五个主要密度(分别为中、高、x-高、xx-高和 xxx-高)之间的 2:3:4:6:8 缩放比例。例如,考虑将启动器图标的大小指定为 48x48 dp。这意味着基线 (MDPI) 资产为 48x48 像素,高密度 (HDPI) 资产应为 72x72 像素基线的 1.5 倍,x-高密度 (XHDPI) 资产应为 96x96 像素基线的 2 倍,等等。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的全面回答,但是我的 res 文件夹中有所有这些文件夹,并且每个文件夹都有一个对应的 corect 大小的图标,它们都具有相同的名称,但是当应用程序运行时,它似乎总是会选择同一个,看起来是 48 x 48
    • 我添加了第二张图片显示问题顶部布局是屏幕高度的 80% 第二个布局是高度的 20% 我希望图标填充 20% 布局的高度但保持circle 如果我在高度上使用 match Parent,它可以工作,但宽度保持不变并导致椭圆形
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 2018-09-23
    • 2023-03-05
    • 2019-05-04
    • 2015-04-22
    • 1970-01-01
    • 2015-06-24
    • 2013-11-29
    相关资源
    最近更新 更多