我想在屏幕中间显示三个按钮,并且三个按钮的宽度都相同,但它们将具有不同长度的文本标签.
只需添加三个不同长度的文本标签按钮,即可生成不同宽度的按钮.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center">
<Button
android:id="@+id/button_1"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:text="ABCDEF" />
<Button
android:id="@+id/button_2"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:text="GHI" />
<Button
android:id="@+id/button_3"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:text="JKLM" />
</LinearLayout>Run Code Online (Sandbox Code Playgroud)
默认按钮宽度包装内容:

-
在所有按钮上将layout_weight设置为1并将layout_width设置为0dip会使它们均匀拉伸以填充整个屏幕宽度.对于我想要的东西,这样的按钮太大了,特别是在大屏幕上.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center">
<Button
android:id="@+id/button_1"
android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1"
android:text="ABCDEF" />
<Button
android:id="@+id/button_2"
android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1"
android:text="GHI" />
<Button
android:id="@+id/button_3"
android:layout_height="fill_parent"
android:layout_width="0dip"
android:layout_weight="1"
android:text="JKLM" />
</LinearLayout>Run Code Online (Sandbox Code Playgroud)
布局重量1按钮填充屏幕宽度:

-
在父LinearLayout中为weightSum设置不同的值可以用来阻止按钮填满整个屏幕,但我不认为这是我想要的路径,因为我不希望按钮占据很大一部分在大屏幕设备上的屏幕.为了澄清,使用weightSum,我可以,例如,我可以设置三个按钮共同占据屏幕宽度的一半,这在小屏幕上看起来可以正常,但在大屏幕上,按钮仍然占据屏幕宽度的一半,并且按钮会比我想要的要大得多.也许最终的解决方案是为不同的屏幕设置不同的布局文件,但我宁愿不走这条路.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:weightSum="5"> …Run Code Online (Sandbox Code Playgroud) 我很难在Android应用中获得我想要的GUI布局结果.
我想要的简要说明:
GUI包括两个TextView和四个按钮.
四个按钮应水平布置,全部在同一行,并固定在屏幕的右下角.
两个TextView中的第一个是从屏幕顶部开始,文本内容从一行到几十行不等 - 超过屏幕适合而不滚动.因此,有时需要滚动来查看所有内容.即使需要滚动,按钮也不参与滚动:它们始终保持固定在屏幕右下角的单行中.当需要滚动时,滚动文本始终位于按钮上方 - 按钮不会覆盖文本.
两个TextView中的第二个显示在第一个TextView的正下方,通常只会在文本的总长度上添加一行或两行.当需要滚动时,第二个TextView将使用第一个TextView滚动,始终显示在第一个TextView的正下方.
其他限制包括我希望所有以下Android设备的布局看起来都不错,包括垂直和水平屏幕布局:
我会在另一天担心平板电脑(比如明天).
-
我已经尝试了许多不同的布局组合,但还没有任何一个非常接近目标.
(对于我尝试过的一些布局组合,我可以用RelativeLayout修复屏幕左下方的按钮,但是我用scolling文本尝试的所有内容都会导致文本在按钮后滚动 - 按钮覆盖文本.我还没想出让按钮与右下方对齐.)
如果有人帮助我解决这个问题,下面的布局示例xml是一个会话起点,但它肯定无法实现目标结果,如下面的屏幕截图所示,使用相同的布局示例xml生成.(虽然有些屏幕截图显示了同样的问题,但它们有助于显示我在不同屏幕上的位置.)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Text View 1. Text varies from a few lines to many more lines than what fits on the screen. Scrolling is necessary to see …Run Code Online (Sandbox Code Playgroud) 我的问题可能是,"如何使用两个单行非包装TextView创建单行水平LinearLayout,其中左TextView始终占据可用屏幕宽度的1/3,右TextView始终占据2/3可用的屏幕宽度,当文本标签太长而无法显示时,文本标签将被截断?" (如果这个问题足够清楚且读者 - 那就是你 - 已经考虑过他们愿意分享的解决方案,那么进一步阅读问题和问题描述可能是不必要的.)
填充了四个这样的LinearLayouts的ListView看起来像这样:
medium length text ---- short text
short text ---- text that is too loooooooooooooo...
loooooooooooooo... ---- short text
loooooooooooooo... ---- text that is too loooooooooooooo...Run Code Online (Sandbox Code Playgroud)在这个模型中,在第一行中,左右文本标签足够短以完全显示,在第二行中,左标签足够短以完全显示,而右标签的文本太长并且因此被截断,并且右侧标签的文本的开头与第一行的右侧文本垂直对齐,在视觉上创建一个列,就好像它在TableLayout中一样,在第三行中,左侧标签的文本也是如此long被截断,以便与第二行和第一行的左侧文本垂直对齐,右侧标签的文本开始与第二行和第一行的右侧文本垂直对齐,第四行中的文本与左侧标签太长,因此与第三行的左侧文本类似地显示,并且右侧标签的文本太长,因此与第二行的右侧文本类似地显示.
从stackoverflow和其他地方的各个帖子,我收集到,虽然使用带有ArrayAdapter的TableLayout有点可能,但有一些缺点,它可能不是正确的方法.
我当然尝试过许多布局参数组合,但目前还没有任何一个接近目标.我试图找出一个适用于许多不同屏幕尺寸的解决方案,因此指定特定像素宽度可能不会很好.
也许以下简单的代码示例(带有屏幕截图)是解决方案的一个很好的起点,只需要一些小的修改.
(stackoverflow代码格式化程序对此代码感到不满.所以,请原谅任何时髦的格式.)
public class TableLayoutLikeListView extends ListActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
List<Datum> data = new ArrayList<Datum>();
data.add(new Datum("short", "short"));
data.add(new Datum("short", "loooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnng"));
data.add(new Datum("loooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnng", "short"));
data.add(new Datum("loooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnng",
"loooooooooooooooooooooooooooooooooooooooooonnnnnnnnnnnnnnnnnnnnnng"));
setListAdapter(new MyAdapter(this, R.layout.row, data)); …Run Code Online (Sandbox Code Playgroud) 我需要示例代码在android中创建TabHost.谁能帮我.
在"普通"大小的屏幕hdpi设备上,我知道应该使用72 x 72像素的图形,否则它们应该遵循图标设计指南(其中一些平台图形有趣地不做).当我尝试通过创建自己的新图形或通过从Android SDK复制图形文件来执行此操作时,菜单中的图形太大,并且它强制文本标签,即标题,应该在下面它没有出现.如果我"强制"使用48 x 48像素的图形,那么尺寸看起来很好并且文本标签有空间出现,但这似乎不是正确的解决方案,因为图形显示质量会降低,并且文档清楚地说应该使用72 x 72图形.
我知道9-patch图形应该用于帮助确保适当的缩放,但平台可绘制文件夹中的菜单图标图形似乎实际上都不是9补丁,因为它们没有任何9补丁标记.对于这些屏幕截图,我确实将9-patch标记添加到Android SDK平台10 72 x 72 hdpi ic_menu_share.png图形的副本中.(draw9patch.bat工具意外地改变了图形的颜色.)
在以下四个屏幕截图中,我将显示九个菜单图标显示,在我的G2上运行,并在具有类似G2特性的仿真器上运行:Android 2.2 API 8 WVGA800 240dpi.(这两种设备都具有"正常"大小的hdpi屏幕.)由于菜单图标图形一次只显示六个,因此每个设备有两个屏幕截图:v1和v2.屏幕截图是用于生成此应用程序的代码组件,以及指向包含我使用的所有图形文件的完整项目的链接.
Emulator_2.2_API8_WVGA800-240_v1:

(注意:在上面的模拟器截图中,标有"G2平台"的图标可能应该标记为"运行平台",因为显示的图形来自当前运行的Android平台 - 而不是来自G2平台.我也是懒得纠正这个.)
Emulator_2.2_API8_WVGA800-240_v2:

G2_v1:

G2_v2:

(请注意,在创建和复制这些图形时,我仔细遵循了图标设计指南.)
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="fubar.guiexamples"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".MenuIconConfusion"
android:label="@string/app_name">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>Run Code Online (Sandbox Code Playgroud)
MenuIconConfusion.java:
public class MenuIconConfusion extends Activity
{
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我想简单地将EditText组件的高度设置为用户屏幕高度的50%.
我正在从一个xml文件(main.xml)创建初始布局,加载在Activity的onCreate(Bundle)中.从xml配置,我理解如何将EditText高度设置为文字值,例如,android:layout_height ="150dip",并且从onCreate(Bundle),我明白我可以在EditText组件上调用setHeight(int) ,但是对setHeight(int)的调用似乎被忽略了,如果我在xml中没有layout_height设置,那么当我的应用程序启动时会出现异常,抱怨高度值是必需的(和app一样)死亡).
有没有办法根据用户的屏幕高度设置xml的高度?换句话说,在xml中,是否可以检索用户的屏幕高度并使用它来计算组件的值?
(我将EditText放在一个垂直方向的LinearLayout中.)