2015-09-18 5 views
0

Я пытаюсь создать tablelayout, чтобы показать изображение профиля пользователя и его имя. Все работает отлично, за исключением того, что макет подключен. представление изображения переполняет tablerow. Я установил tablerow layout_height="70dp" и iamgeview layout_height ="50dp" и layout_margin="10dp", чтобы вертикально центризировать изображение. TableRow XML:android customize tablerow withviewview overflow tablerow

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="70dp" 
    android:orientation="horizontal" 
    android:layout_marginBottom="1dp" 
    android:background="#fff"> 
    <ImageView 
     android:layout_height="50dp" 
     android:layout_width="50dp" 
     android:id="@+id/pic" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="10dp" 
     android:background="#f00"/> 
    <TextView 
     android:layout_height="20dp" 
     android:layout_width="wrap_content" 
     android:layout_marginTop="25dp" 
     android:layout_marginRight="25dp" 
     android:id="@+id/value" 
     android:textColor="#000" 
     android:layout_alignParentRight="true" 
     android:layout_weight="3.0" 
     android:textAlignment="gravity" 
     android:gravity="right" 
     /> 
</TableRow> 

TableLayout XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#fff"> 
     <TableLayout android:id="@+id/contact_table" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="#aaa"> 
     </TableLayout> 
</ScrollView> 

код Java:

table =(TableLayout)findViewById(R.id.contact_table); 
        LayoutInflater inflater = getLayoutInflater(); 
        TableRow row = (TableRow)inflater.inflate(R.layout.profilerow, table, false); 
        ImageView tag = (ImageView)row.findViewById(R.id.pic); 
        new DownloadImageTask(tag).execute(me.getDp_address()); 
        TextView value = (TextView)row.findViewById(R.id.value); 
        value.setText(me.getFirst_name()+" "+me.getLast_name()); 
        table.addView(row); 

        TableRow row2 = (TableRow)inflater.inflate(R.layout.centertextrow,table ,false); 
        table.addView(row2); 



private class DownloadImageTask extends AsyncTask<String,Void,Bitmap>{ 
     ImageView img; 
     public DownloadImageTask(ImageView bmImage){ 
      this.img = bmImage; 
     } 
     @Override 
     protected Bitmap doInBackground(String... urls) { 
      String url_string = urls[0]; 
      Bitmap micoin = null; 
      try { 
       InputStream in = new java.net.URL(url_string).openStream(); 
       micoin = BitmapFactory.decodeStream(in); 
      } catch (IOException e) { 
       Log.i("michaellog","error a"); 
       //Log.e("michaellog",e.getMessage()); 
       e.printStackTrace(); 
      } 
      return micoin; 
     } 

     @Override 
     protected void onPostExecute(Bitmap bitmap) { 
      super.onPostExecute(bitmap); 
      img.setImageBitmap(bitmap); 
     } 
    } 

здесь есть образ того, как он выглядит: link

изображение смену вниз.

ответ

0

Aloha!

Я столкнулся с тем же типом проблемы при создании списка каналов youtube, которые были помещены в табличное представление для нашего университетского приложения. Единственное различие, которое я вижу из своего макета и вашего, - это добавить андроид: scaleType = "centerCrop" в созданную ячейку таблицы. Это должно масштабировать ваше изображение, чтобы оно соответствовало правильной области. Я также использую линейную компоновку вместо типа tableRow для каждой ячейки в заполняемой таблице. Я бы также рассмотрел ответ здесь. https://stackoverflow.com/a/15832564/877568

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/semesterButtonLL" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <ImageView android:layout_width="50dip" 
     android:id="@+id/image" 
     android:src="@drawable/icon72" 
     android:layout_height="50dip" 
     android:scaleType="centerCrop"> 
    </ImageView> 
    <TextView android:text="TextView" 
     android:id="@+id/text" 
     android:textColor="@color/usu_blue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left|center_vertical" 
     android:textSize="20dip" 
     android:layout_marginLeft="10dip"> 
    </TextView> 
</LinearLayout> 

Что касается кода вы предоставили все выглядит нормально, как вы приносите данные в и если он отображает изображение на ссылку вы предоставили, то это может быть столь же просто, как добавление centerCrop к линии в вашем xml. Надеюсь, это поможет.

+0

эй, г-н за предложение. Я открыл ссылку. Я понял, что они использовали ListView вместо tablelayout и scrollview. что вы использовали? tablelayout или listview? –

+0

ListView. Я лично использовал код выше для ячейки, а затем родительский контейнер был относительным макетом, а listview - дочерним. То же, что и в примере. Этот метод создания таблицы - это более старый способ сделать это. TableLayout делает в основном то же самое в своем собственном макете, но я знаю, что метод listview работает хорошо. –