我创建了一个自定义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
答案 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));