我有一个占据整个屏幕的片段,包含按钮和一个可以缩放以适应它的SeekBar,以及固定大小的TextViews。我使用带有权重的线性水平和垂直布局来实现这一目标。
问题是我无法使按钮文字足够大而不会使按钮扩大。出于某种原因,任何大于约35sp的文本大小都会使按钮展开,无论按钮有多大。此屏幕截图显示按钮大小有足够的空间用于文本:
理想情况下,我希望"<"和">"填充按钮的字符。 (我打算按照按钮大小以编程方式更改字体大小,例如针对不同的屏幕大小),但我们还没有尝试过,因为我甚至无法使静态布局工作。
编辑:我想避开图片,因为如果我有15个按钮和8个桶,那就是我需要的120张图片!
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/VerticalLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp" >
<!-- ........ -->
<TextView
android:id="@+id/trackTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2" >
<Button
android:id="@+id/trackPreviousButton"
style="android:buttonBarStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/button_track_previous"
android:textSize="35sp" />
<Button
android:id="@+id/trackNextButton"
style="android:buttonBarStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/button_track_next"
android:textSize="35sp" />
</LinearLayout>
<SeekBar
android:id="@+id/seekBar"
style="@style/tallerBarStyle"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<!-- ........ -->
</LinearLayout>
我尝试将以下行添加到按钮中,但它只会产生一些小差异,如果有的话:
android:padding="0dp"
关于获取字体高度以填充按钮而不填充的建议是我的主要问题。 (但是如果动态调整文本大小以填充不同屏幕尺寸的按钮的问题可以同时解决,那就太棒了。)
编辑:事实证明,使用较大的字体大小会影响线性布局高度的加权效果,这就是为什么似乎有填充 - 更大的字体大小增加了按钮大小,而不是因为填充(是0)但由于权重
答案 0 :(得分:4)
Button
不是适合您目的的小部件。请改用ImageButton
(甚至是ImageView
)。
我打算以编程方式根据按钮大小更改字体大小,例如对于不同的屏幕尺寸
您当前的方法会让您遇到很多关于正确调整UI组件大小的问题。鉴于那里有大量的Android设备,屏幕尺寸只是问题的一个方面。您还将处理不同的屏幕密度。最好的方法是使用大小/密度桶(drawable-mdpi / hdpi / xhdpi)。帮助android为你工作。
使用drawables
表示next
和previous
。如果您担心平板电脑屏幕的绘图太小,请创建适当的可绘制资源/文件夹:
// Phones - 4 to 7 in
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi
// Tablets - 7 to 10 in
drawable-large-mdpi
drawable-large-hdpi
// Tablets - 10 in
drawable-xlarge-mdpi
此列表可能并非详尽无遗。在最终确定您的尺寸/密度桶之前,请考虑进行一些研究。
输出:
@ drawable size 32dp:
@ drawable size 64dp
现在变得非常简单 - 通过手机,7英寸平板电脑和10英寸平板电脑上的目视检查确定可绘制尺寸。然后使用密度标度在我上面提到的文件夹中创建和存储适当大小的drawable。让android处理要从中选择的桶。
答案 1 :(得分:2)
问题是默认情况下按钮包含minHeight
属性。我遇到了同样的问题,并仅用XML
文件中的一行代码来解决了这个问题:
android:minHeight="0dp"
答案 2 :(得分:1)
您可以快速轻松地解决问题!
在我的经验中,自动调整Android中的文本是非常困难的,尤其是涉及填充时。我建议不要使用尖括号字符,而是使用drawable - 在线提供大量箭头图标 - 以及ImageButton
。例如:
<ImageButton
android:id="@+id/trackNextButton"
style="android:buttonBarStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/left_arrow"
android:scaleType="fitXY"
android:padding="0dp"
android:textSize="35sp" />
通过使用不同的ScaleTypes,您可以改变图像的拉伸。更好的是,屏幕尺寸问题已经解决,因为您可以为不同的密度添加不同的可绘制对象。
答案 3 :(得分:0)
使用minWidth =&#34; 0&#34;或&#34; 1&#34;减少文本按钮上的水平填充。