首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释TextView drawableStart的显示错误?

如何解释TextView drawableStart的显示错误?
EN

Stack Overflow用户
提问于 2013-03-12 08:36:37
回答 2查看 1.5K关注 0票数 1

更新:在这里创建和展示的更简单的代码,完整的布局XML定义。

当尝试用XML布局中的drawableStart元素的新TextView属性替换左边的图标时,我可以观察到以下错误显示的上一项(在Nexus 7上捕获):

相关代码是-- MainActivity:

代码语言:javascript
复制
package cz.skil.android.tut.testtextviewdrawablestart;

import android.os.Bundle;
import android.app.Activity;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_list);

        ListView listView = (ListView) findViewById(R.id.mylist);
        String[] values = new String[] {"item 1", "item 2", "item 3"};

        MyAdapter adapter = new MyAdapter(this, values);

        listView.setAdapter(adapter);         
    }
}

MyAdapter

代码语言:javascript
复制
package cz.skil.android.tut.testtextviewdrawablestart;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MyAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;

    public MyAdapter(Context context, String[] values) {
        super(context, R.layout.row, values);
        this.context = context;
        this.values = values;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.row, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.mylabel);
        textView.setText(values[position]);
        return rowView;
    }
}

main_list.xml布局:

代码语言:javascript
复制
<?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" >

    <ListView
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" > <!-- Update: here is the bug -->
    </ListView>

</LinearLayout>

最后是row.xml布局:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/mylabel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"

    android:layout_marginLeft="4dp"
    android:drawablePadding="8dp"
    android:drawableStart="@drawable/reminder"       

    android:lines="1"
    android:textSize="24sp" >

</TextView>

我想原因是,用于显示项目的区域的高度是根据为文本声明的维度计算的;然而,图标可能会强制列表项的高度更大。

你能确认一下这种行为吗?如果是的话,它为什么会这样做?我对Android很陌生。很可能我做错了。

(这个问题与这个问题是松散相关的:Android布局:在TextView和android上:可拖动启动设置图标的大小?)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-09 13:43:00

android:layout_height="wrap_content"设置为ListView总是错误的。它与android:layout_height="fill_parent"的工作方式如出一辙。更详细的解释可以在这里找到ListView的世界

票数 3
EN

Stack Overflow用户

发布于 2013-03-22 14:49:57

虽然我不知道这是有意的行为还是错误,但当您使用drawableStart时会发生这种情况。将其更改为drawableLeft,它将正确绘制布局。

代码语言:javascript
复制
<TextView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/mylabel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"

    android:layout_marginLeft="4dp"
    android:drawablePadding="8dp"
    android:drawableLeft="@drawable/reminder"       

    android:lines="1"
    android:textSize="24sp" >

</TextView>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15356541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档