问题:
I'm making a quiz application on Android and I have an issue with one of my layout. When there is too much text (but the text fit in the button), the button is too low.
I...
可以将文章内容翻译成中文,广告屏蔽插件会导致该功能失效:
问题:
I'm making a quiz application on Android and I have an issue with one of my layout. When there is too much text (but the text fit in the button), the button is too low.
I don't know how to fix it, I tried to increase the buttons height, decrease the size but it doesn't change anything. Is it possible to fix the position ?
Here is my layout :
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:minHeight="30sp"
android:progress="100"
android:id="@+id/progressbar"
android:progressTint="#2f9926"
android:progressBackgroundTint="#636262"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="15sp"
android:layout_marginTop="10sp"
android:textAlignment="textEnd"
android:textSize="30sp"
android:fontFamily="@font/caviardreamsbold"
android:id="@+id/tv_no"/>
<TextView
android:layout_width="400sp"
android:layout_marginTop="50sp"
android:layout_marginBottom="40sp"
android:textAlignment="center"
android:textSize="40sp"
android:fontFamily="@font/caviardreams"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/tv_question"
/>
<ImageView
android:layout_width="450sp"
android:layout_height="200sp"
android:layout_gravity="center"
android:id="@+id/img"/>
<View
android:layout_width="match_parent"
android:layout_height="0sp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginStart="20sp"
android:layout_marginEnd="20sp"
android:layout_marginBottom="20sp">
<Button
android:layout_height="160sp"
android:layout_width="250sp"
android:textAllCaps="false"
android:background="@drawable/button_multiple"
android:layout_marginEnd="15sp"
android:textColor="@android:color/black"
android:textSize="18sp"
android:layout_weight="1"
android:id="@+id/btn_one"/>
<Button
android:layout_height="160sp"
android:layout_width="250sp"
android:textAllCaps="false"
android:background="@drawable/button_multiple"
android:textColor="@android:color/black"
android:textSize="18sp"
android:layout_weight="1"
android:id="@+id/btn_two"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginStart="20sp"
android:layout_marginEnd="20sp"
android:layout_marginBottom="30sp">
<Button
android:layout_height="160sp"
android:layout_width="250sp"
android:textAllCaps="false"
android:background="@drawable/button_multiple"
android:layout_marginEnd="15sp"
android:textColor="@android:color/black"
android:textSize="18sp"
android:layout_weight="1"
android:id="@+id/btn_three"/>
<Button
android:layout_height="160sp"
android:layout_width="250sp"
android:textAllCaps="false"
android:background="@drawable/button_multiple"
android:textColor="@android:color/black"
android:textSize="18sp"
android:layout_weight="1"
android:id="@+id/btn_four"/>
</LinearLayout>
</LinearLayout>
And here is a screenshot because it's hard to explain clearly : https://image.noelshack.com/fichiers/2019/10/6/1552145596-screenshot-20190309-162509.jpg
回答1:
Add
android:gravity="center"
to the LinearLayouts
回答2:
You can use this library - it will make the text on your view to resize according to the amount of text:
In your gradle:
implementation 'me.grantland:autofittextview:0.2.1'
And now just put it in your XML:
<me.grantland.widget.AutofitTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textSize="12sp"
app:minTextSize="8sp" />
Edit - I noticed that you are using fixed size on your view, first use sp as text size and not vire size and second don't use fixed sizes in your layout because your layout will just not be responsive, instead use ConstraintLayout like this :
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Fragments.MenusDesign.BookMenu.BookMenu">
<ProgressBar
android:id="@+id/progressbar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="29dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:minHeight="30sp"
android:progress="100"
android:progressBackgroundTint="#636262"
android:progressTint="#2f9926"
app:layout_constraintEnd_toStartOf="@+id/guideline6"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_no"
android:layout_width="0dp"
android:layout_height="23dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="textEnd"
android:textSize="30sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/guideline6"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_question"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:textAlignment="center"
android:textSize="40sp"
app:layout_constraintBottom_toTopOf="@+id/img"
app:layout_constraintEnd_toEndOf="@+id/tv_no"
app:layout_constraintStart_toEndOf="@+id/img"
app:layout_constraintTop_toBottomOf="@+id/tv_no" />
<ImageView
android:id="@+id/img"
android:layout_width="329dp"
android:layout_height="153dp"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/btn_two"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_one"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="152dp"
android:layout_marginBottom="8dp"
android:layout_weight="1"
android:textAllCaps="false"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/btn_two"
app:layout_constraintStart_toStartOf="@+id/btn_two"
app:layout_constraintTop_toTopOf="@+id/btn_two" />
<Button
android:id="@+id/btn_two"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="347dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:textAllCaps="false"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintEnd_toStartOf="@+id/guideline6"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/img"
app:layout_constraintTop_toTopOf="@+id/progressbar" />
<Button
android:id="@+id/btn_three"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAllCaps="false"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/btn_one"
app:layout_constraintEnd_toEndOf="@+id/btn_four"
app:layout_constraintStart_toStartOf="@+id/btn_four"
app:layout_constraintTop_toTopOf="@+id/btn_one" />
<Button
android:id="@+id/btn_four"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:textAllCaps="false"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/btn_two"
app:layout_constraintEnd_toEndOf="@+id/img"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/guideline6"
app:layout_constraintTop_toTopOf="@+id/btn_two"
app:layout_constraintVertical_bias="1.0" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />