0

ListView私は2つを追加したカスタムを作成しました。1つは日付を表示しTextView、もう1つはその特定の日付に入力された重みを表示します。ここで必要なのは、2番目に重みを表示し、ユーザーが入力した重みとして設定されたテキストビューの幅です。私が書いたコードはいくつかの問題を示しています。これは、ユーザーがウェイト70と75を入力すると、の幅が同じサイズを示すことを意味します。なぜこれが起こるのか。誰かが私がこれを解決するのを手伝ってください。TextViewTextViewTextViewTextView

リストアクティビティの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>  
</RelativeLayout>

ListViewアイテムのXMLコード

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="2dip" >

    <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>
</RelativeLayout>

リストビューを生成するための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;
    } 
}
}

Scrennshot

ここに画像の説明を入力してください

4

2 に答える 2

0

それぞれ 60dps の左右の余白が問題になる可能性があります。空きスペースに 120 dps を費やしています。http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.htmlによると、電話の画面サイズは 320 dp 幅になります。

さらに、CycleManager が何をするのかはわかりませんが、そうでない場合は、デバイスの画面幅を使用し、それに応じてスケーリングする最大値を定義することになるかもしれません。

最後に、関係ないと思いますが、リストビューに wrap_content を使用しています。fill_parentにした方が適切だと思いませんか?

于 2012-04-24T07:51:44.960 に答える
0

OK @Anshuman 画面のリアリストの問題です。70 と 75 は同じサイズです。これは、そのビューのスペースを使い果たしたためです。その青いマーカーの比率を変更してみてください。たぶん、このようなものでスペースがいくらか増えます(必要なすべての重みに合うように必要なサイズが得られるまで、shrinkScaler変数をいじってみてください.

double shrinkScaler = .75;
holder.txt_weight_display.setMinWidth((int)(borderwidth * shrinkScaler));
于 2012-04-24T07:57:13.707 に答える