小编Tha*_*hem的帖子

如何创建具有相等宽度的按钮?

我想在屏幕中间显示三个按钮,并且三个按钮的宽度都相同,但它们将具有不同长度的文本标签.

只需添加三个不同长度的文本标签按钮,即可生成不同宽度的按钮.

<?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按钮填充屏幕宽度:
布局重量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)

user-interface android button android-layout

27
推荐指数
1
解决办法
2万
查看次数

滚动按钮上方的文本,按钮固定在底部

我很难在Android应用中获得我想要的GUI布局结果.

我想要的简要说明:

GUI包括两个TextView和四个按钮.

四个按钮应水平布置,全部在同一行,并固定在屏幕的右下角.

两个TextView中的第一个是从屏幕顶部开始,文本内容从一行到几十行不等 - 超过屏幕适合而不滚动.因此,有时需要滚动来查看所有内容.即使需要滚动,按钮也不参与滚动:它们始终保持固定在屏幕右下角的单行中.当需要滚动时,滚动文本始终位于按钮上方 - 按钮不会覆盖文本.

两个TextView中的第二个显示在第一个TextView的正下方,通常只会在文本的总长度上添加一行或两行.当需要滚动时,第二个TextView将使用第一个TextView滚动,始终显示在第一个TextView的正下方.

其他限制包括我希望所有以下Android设备的布局看起来都不错,包括垂直和水平屏幕布局:

  • Android 1.5 API3 QVGA MDPI(320x240)设备
  • Android 1.5 API3 HVGA MDPI设备
  • Android 1.6 API4 QVGA LDPI设备
  • Android 2.3 API10 WVGA800设备
  • 在上述设备之间有屏幕的一切

我会在另一天担心平板电脑(比如明天).

-

我已经尝试了许多不同的布局组合,但还没有任何一个非常接近目标.

(对于我尝试过的一些布局组合,我可以用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)

user-interface android android-layout

9
推荐指数
1
解决办法
9260
查看次数

通缉:TableLayout-Like ListView

我的问题可能是,"如何使用两个单行非包装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)

user-interface android listview android-layout

9
推荐指数
2
解决办法
2万
查看次数

5
推荐指数
1
解决办法
3万
查看次数

菜单图标混乱 - 它们太大了!

在"普通"大小的屏幕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:
Emulator_2.2_API8_WVGA800-240_v1

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

Emulator_2.2_API8_WVGA800-240_v2:
Emulator_2.2_API8_WVGA800-240_v2

G2_v1:
G2_v1

G2_v2:
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)

graphics icons android

5
推荐指数
1
解决办法
6172
查看次数

如何动态设置EditText高度

我想简单地将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中.)

android

2
推荐指数
1
解决办法
7888
查看次数