如何在textView中设置不同的宽度

时间:2012-04-24 07:19:25

标签: android listview textview

我创建了一个自定义ListView,其中我添加了两个TextView,其中一个TextView显示了日期,另一个TextView显示了重量输入特定日期。现在我想要的是在显示权重的第二个TextView中,文本视图的宽度设置为用户输入的权重。我写的代码显示了一些问题。表示当用户输入权重70和75时,TextView的宽度显示相同的大小。为什么会这样。请任何人帮我解决这个问题。

列表活动的XML代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/img_allnotes_bg" >

<TextView
    android:id="@+id/txt_weight_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/image_divder1"
    android:layout_marginTop="15dp"
    android:gravity="center_horizontal|center_vertical"
    android:text="@string/txt_weight_title"
    android:textColor="#5f5f5f"
    android:textSize="@dimen/font_size_page_text" >
</TextView>


<ListView
    android:id="@+id/weight_list_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/bottom_control_bar"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/image_divider2"
    android:layout_marginBottom="15dp"
    android:layout_marginTop="2dp"
    android:cacheColorHint="#00000000"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:listSelector="#00000000" >
</ListView>  

列表视图项的XML代码

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/txt_weightdate_display"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="60dp"
    android:layout_marginRight="60dp"
    android:focusable="false"
    android:textColor="#5f5f5f"
    android:textSize="@dimen/font_size_page_text" >
</TextView>
 <TextView
    android:id="@+id/txt_weight_display"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/txt_weightdate_display"
    android:layout_marginLeft="60dp"
    android:layout_marginRight="60dp"
    android:layout_marginTop="5dp"
    android:gravity="center"
    android:focusable="false"
    android:textColor="#5f5f5f"
    android:background="#00FFFF"
    android:textSize="@dimen/font_size_page_text" >
</TextView>

生成列表视图的Java代码

public void displayWeights()
{
    m_allWeightsList  = (ListView) findViewById(R.id.weight_list_view);

    int iWeightCount = CycleManager.getSingletonObject().getWeightCount();

    m_weightsdateDisplay  = new String[iWeightCount];

    m_weightDisplay = new String[iWeightCount];

    m_enStage = new int[iWeightCount];

    int i;      

    for (i=0; i<iWeightCount; i++)
    {
        m_weightsdateDisplay[i] = "";

        Date dtWeightDate = CycleManager.getSingletonObject().getWeightDate(i);

        m_enStage[i] = CycleManager.getSingletonObject().getCycleStage(dtWeightDate);

        m_weightsdateDisplay[i] = formator.format(dtWeightDate.getTime());

        m_weightDisplay[i] = "";

        m_weightDisplay[i] = CycleManager.getSingletonObject().getWeight(dtWeightDate); 
    }

    m_adapter = new AllWeightsAdapter(this, m_weightsdateDisplay, m_weightDisplay);

    m_allWeightsList.setAdapter(m_adapter);  

}

class AllWeightsAdapter extends BaseAdapter
{   
    public String    m_weightsDateDisplay[];

    public String    m_weightsDisplay[];

    public Activity  m_context;

    public LayoutInflater  m_inflater;

    public AllWeightsAdapter(Activity m_context, String[] m_weightsDateDisplay, String[] m_weightsDisplay)
    {
        super();

        this.m_context = m_context;

        this.m_weightsDateDisplay = m_weightsDateDisplay;

        this.m_weightsDisplay = m_weightsDisplay;

        this.m_inflater = (LayoutInflater)m_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      
    }
    public AllWeightsAdapter()
    {

    }
    public int getCount()
    {
        return m_weightsDateDisplay.length; 
    }

    public Object getItem(int position)
    {   
        return null;
    }

    public long getItemId(int position)
    {
        return 0;
    }

    public class ViewHolder
    {
        TextView txt_weightdt_display;

        TextView txt_weight_display;
    }

    @Override 
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder;

        Typeface face = Typeface.createFromAsset(m_context.getAssets(), "fonts/Cicle Semi.ttf");

        if(convertView == null)
        {
            holder = new ViewHolder();
            convertView = m_inflater.inflate(R.layout.all_weights_list, null);

            holder.txt_weightdt_display = (TextView) convertView.findViewById(R.id.txt_weightdate_display); 
            holder.txt_weight_display = (TextView) convertView.findViewById(R.id.txt_weight_display);
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder)convertView.getTag();
        }

        // Added Weight Date in List View Component
        holder.txt_weightdt_display.setText(m_weightsDateDisplay[position]);
        holder.txt_weightdt_display.setTypeface(face);

        // Added Weights in List View   Component       
        double factor, width, scale, borderwidth, minScreenWidth = 40, maxScreenWidth = 200;
        double maxWeight = CycleManager.getSingletonObject().getMaxWeight();
        double minWidth  = CycleManager.getSingletonObject().getMinWeight();  

        scale = maxWeight - minWidth;
        factor = (maxScreenWidth - minScreenWidth) / scale;

        width = (maxWeight - Double.parseDouble(m_weightsDisplay[position])) * factor;
        borderwidth = maxScreenWidth - width;

        holder.txt_weight_display.setText(m_weightsDisplay[position]);
        holder.txt_weight_display.setMinWidth((int)borderwidth);
        holder.txt_weight_display.setTypeface(face);

        return convertView;
    } 
}
}

Screnn Shot

enter image description here

2 个答案:

答案 0 :(得分:0)

每个60dps的左/右边距可能是个问题。你花费120dps空的空间。 http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html表示手机的屏幕尺寸为320dp宽。

此外我不确定CycleManager的作用,但如果不这样做,可能是定义最大值,你应该使用设备的屏幕宽度和相应的比例。

最后,我猜这不相关,但你正在使用wrap_content作为listview。难道你不认为让它成为fill_parent更合适吗?

答案 1 :(得分:0)

OK @Anshuman这是屏幕实现的问题。 70和75的大小相同,因为您已为该视图占用了最大空间。尝试更改该蓝色标记的比例。也许这样的东西会给你更多的空间(只需要使用shrinkScaler变量,直到你得到你想要的所有重量所需的大小。

double shrinkScaler = .75;
holder.txt_weight_display.setMinWidth((int)(borderwidth * shrinkScaler));