当我更改Button中文本的大小时,为什么相邻的按钮会移动

时间:2016-10-11 20:00:52

标签: android android-layout

以下是每个Sys.setenv(JAVA_HOME = "C:/Program Files/Java/jdk1.8.0_101/") 具有相同尺寸文字时的布局:

enter image description here

这是我增加右下方Button文字大小时的布局:

enter image description here

这里发生了什么?为什么" 0" Button移动低于与其相邻的两个Button

这是布局:

Buttons

更新

我制作了&#34; DONE&#34; <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/white" android:orientation="vertical" android:padding="6dp"> <TextView android:id="@+id/input_textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textColorHint="@color/hint_color" android:singleLine="true" android:textSize="40sp"/> <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:columnCount="3"> <Button android:id="@+id/the_1_button" android:background="@android:color/white" android:text="1"/> <Button android:id="@+id/the_2_button" android:background="@android:color/white" android:text="2"/> <Button android:id="@+id/the_3_button" android:background="@android:color/white" android:text="3"/> <Button android:id="@+id/the_4_button" android:background="@android:color/white" android:text="4"/> <Button android:id="@+id/the_5_button" android:background="@android:color/white" android:text="5"/> <Button android:id="@+id/the_6_button" android:background="@android:color/white" android:text="6"/> <Button android:id="@+id/the_7_button" android:background="@android:color/white" android:text="7"/> <Button android:id="@+id/the_8_button" android:background="@android:color/white" android:text="8"/> <Button android:id="@+id/the_9_button" android:background="@android:color/white" android:text="9"/> <ImageButton android:id="@+id/the_backspace_button" style="@style/Widget.AppCompat.Button" android:background="@android:color/white" android:src="@drawable/ic_backspace"/> <Button android:id="@+id/the_0_button" android:background="@android:color/white" android:text="0"/> <Button android:id="@+id/the_done_button" android:layout_width="88dp" android:layout_height="48dp" android:minWidth="0dp" android:minHeight="0dp" android:background="@android:color/white" android:text="done"/> </GridLayout> </LinearLayout> 超大 - 100sp - 并设置ButtonmaxWidth等于其他maxHeight的高度和宽度。结果如下:

enter image description here
*蓝色是Buttons的背景,红色是&#34; 0&#34; GridLayout,黄色&#34; DONE&#34; Button's

为什么会改变&#34; DONE&#34;的文字大小。如果Button's的大小永远不会改变,那么按钮会影响特定Button以外的任何内容吗?

6 个答案:

答案 0 :(得分:1)

我认为完成按钮存在问题。你设置它的背景。然后你还将其文本设置为“完成”。

只需将文字设置为空,问题就可以解决;)

答案 1 :(得分:1)

使用网格怎么样:layout_rowWeight或grid:layout_rowHeight属性对于每个按钮都相同?

看看这个: https://stackoverflow.com/a/32291319/2205825

答案 2 :(得分:1)

看起来GridLayout为实际文本大小保留了足够的高度,并且尽管为完成按钮的layout_height,仍然保留了一些默认填充。

答案 3 :(得分:1)

试试这个......

使用GridView代替许多Button,不会给您任何布局问题(调整视图)

查看解决按钮调整的问题的以下示例

  

使用此layout代替您的布局.....

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="6dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    <TextView
        android:id="@+id/input_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:singleLine="true"
        android:textSize="40sp" />

    </LinearLayout>

    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnWidth="100dp"
        android:gravity="center"
        android:numColumns="3" />

</LinearLayout>
  

OnCreate方法中添加这两行.....

  GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new CustomAdapter(this));
  

在项目中添加此适配器.....

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;

/**
 * Created by sushildlh on 10/14/16.
 */
public class CustomAdapter extends BaseAdapter {
    private Context mContext;

    // Keep all Images in array
    public String[] text = {
            "1", "2", "3", "4", "5", "6", "7", "8", "9", "", "0", "DONE"
    };

    // Constructor
    public CustomAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return 12;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new textView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder = null;
        if (holder == null) {
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            convertView = inflater.inflate(R.layout.item, parent, false);
            holder = new Holder();
            holder.button = (Button) convertView.findViewById(R.id.button);
            holder.image = (ImageButton) convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }

        if (position != 9) {
            holder.image.setVisibility(View.GONE);
            holder.button.setText(text[position]);
        } else {
            holder.image.setImageResource(R.drawable.ic_backspace_black_24dp);    //change ic_backspace_black_24dp into to your image ......
            holder.button.setVisibility(View.GONE);
        }

        return convertView;

    }

    public static class Holder {
        Button button;
        ImageButton image;
    }


}
  

这是你的布局文件夹中的item.xml布局......

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:layout_width="100dp"
        android:layout_height="60dp"
        android:gravity="center"
        android:background="@null"
        android:textSize="25dp"/>

    <ImageButton
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="60dp"
        android:focusable="false"
        android:background="@null"
        android:gravity="center" />

</LinearLayout>
  

上面的代码为您提供了这样的输出....

oupput

注意: - 始终使用GridViewListView来获取相同的观看模式.....

答案 4 :(得分:1)

您可以使用android:layout_weight属性。

答案 5 :(得分:0)

使用'线性布局'来构建它。