Intereting Posts
Оправьте текст в приложении Android с помощью WebView, но представив интерфейс TextView? Почему com.facebook.Settings.publishInstallAsync в onResume? Реализация AsyncQueryHandler Масштабирование проблемы на Android – почему картина такая неуклюжая? Kotlin: Как работать со списками: Непроверено В ролях: kotlin.collections.List <Kotlin.Any?> To kotlin.colletions.List <Путевая точка> Android NDK переполняет dalvik локальную справочную таблицу JNI Интеграция FaceBook, Twitter, социальных сетей в Android Получить индекс перечисления из строки? Расписание уведомления с помощью диспетчера аварийных сигналов в форматах xamarin для Android Предотвращать выполнение асинтезы несколько раз Обработка сессионного файла cookie в Android Volley OnSearchRequested () больше не работает в Android 4.x +? Получение MAC-адреса в Android 6.0 Обнаружение движения с использованием Accelerometer в Android Элементы управления Youtube (воспроизведение / пауза) не работают после восстановления проигрывателя / активность возобновляется

Почему смежные кнопки перемещаются, когда я изменяю размер текста в кнопке

Вот макет, когда каждая Button имеет текст одинакового размера:

Введите описание изображения здесь

И вот макет, когда я увеличиваю размер нижнего правого текста Button :

Введите описание изображения здесь

Что тут происходит? Почему Button «0» перемещается ниже двух смежных с ней Buttons ?

Вот макет:

 <?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> 

Обновить:

Я сделал текст Button «DONE» super large – 100sp – и установил maxWidth и maxHeight для него, равного высоте и ширине других Buttons . Вот результат:

Введите описание изображения здесь
* Синий – это фон GridLayout , красный – Button's «0», а желтая Button's «DONE»

Почему изменение размера текста кнопки «DONE» влияет на что-либо иное, кроме этой конкретной Button если размер Button никогда не изменяется?

Solutions Collecting From Web of "Почему смежные кнопки перемещаются, когда я изменяю размер текста в кнопке"

Я думаю, что есть проблема с кнопкой done. Вы устанавливаете фон. Затем вы также устанавливаете свой текст как «done».

Просто установите текст пустым и проблема может решить;)

Как насчет использования сетки: layout_rowWeight или grid: атрибуты layout_rowHeight одинаковы для каждой кнопки?

Посмотрите на это: https://stackoverflow.com/a/32291319/2205825

Попробуй это …..

Используйте 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> 

Добавьте эти 2 строки в свой метод 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

Примечание. – Всегда используйте GridView OR ListView для того же шаблона представлений …..

Вы можете использовать свойство android: layout_weight.

Похоже, что GridLayout резервирует достаточную высоту для фактического размера текста и некоторого по умолчанию заполнения, несмотря на макет_хейма для кнопки «Готово».

Постройте его с помощью «Линейных макетов».