2013-08-21 3 views
0

Это должно быть легко, как я могу выровнять звезду посередине. Я добавляю текст заголовка верхнего заголовка и звезды динамически в коде. Я попытался установить гравитацию на изображение, не получилось.Выравнивание изображения в tablelayout

UPDATE: Я добавил iv.setScaleType(ImageView.ScaleType.FIT_START) Теперь звезда выравнивает налево

enter image description here enter image description here

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
     android:layout_height="fill_parent" xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"> 
    <TableLayout 
    android:id="@+id/TableAch" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/white" 
    android:layout_alignParentTop="true" 
    android:shrinkColumns="*" 
    android:stretchColumns="*" 
    > 

     <TableRow 
     android:id="@+id/RowAchTitle" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:gravity="center_horizontal" 
     > 

      <TextView 
       android:id="@+id/ViewAchTitle" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:textStyle="bold" 
       android:text="Achievements" 
       android:gravity="center" 
       android:layout_span="6"> 
      </TextView> 

     </TableRow> 
     <TableRow 
     android:id="@+id/RowAchHeader" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:weightSum="6" 
     > 
     </TableRow> 

    </TableLayout> 



    </RelativeLayout> 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.acheivements); 

      tbLayout = (TableLayout) this.findViewById(R.id.TableAch); 
      rowHeader = (TableRow) this.findViewById(R.id.RowAchHeader); 

      FlurryAgent.logEvent("Achievements"); 

      TableRow.LayoutParams tableRowParams= 
         new TableRow.LayoutParams 
         (TableRow.LayoutParams.FILL_PARENT,TableRow.LayoutParams.WRAP_CONTENT); 

      tableRowParams.setMargins(0, 0, 0, 5); 


      TableRow.LayoutParams params = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT); 

      params.weight = 1; 
      params.gravity= Gravity.CENTER; 

      int fontSize = 12; 

      TextView tv = new TextView(this); 
      tv.setLayoutParams(params); 
      tv.setText("  "); 
      tv.setTextSize(fontSize); 
      rowHeader.addView(tv); //This is blank top left corner 

      for (Level level : Level.values()) { //Then we add all the headers for games 
       tv = new TextView(this); 

       tv.setText("EASY"); 
       tv.setTextSize(fontSize); 
       tv.setLayoutParams(params); 
       rowHeader.addView(tv); 
      } 

      //Next we add the levels for each game, putting a pass image where passed 



      for (Games game : Games.values()) { 
       TableRow newRow = new TableRow(this); 
       newRow.setLayoutParams(tableRowParams); 

       String[] words = game.name().split("(?=[A-Z])"); 
       String name = ""; 
       for (String word : words) { 
        if(word.length() < 1) continue; 
        name += word + "\n"; 
       } 

       tv = new TextView(this); 
       tv.setTextSize(fontSize); 
       tv.setText(name); 
       tv.setLayoutParams(params); 
       newRow.addView(tv); 
       newRow.setWeightSum(6); 

       for (Level level : Level.values()) { 
        ImageView iv = new ImageView(this); 

         iv.setScaleType(ImageView.ScaleType.FIT_START); 
        iv.setLayoutParams(params); 

        tv = new TextView(this); 
        tv.setLayoutParams(params); 
        tv.setText("EASY"); 
        tv.setTextSize(fontSize); 

        if(acheivements.getPassed(level, game))//has achievement 
        { 
         iv.setImageResource(R.drawable.star_gold_full_small); 
        } 
        else { 
         iv.setImageResource(R.drawable.star_gold_empty_small); 
        } 
        newRow.addView(tv); 
       } 
       tbLayout.addView(newRow); 
      } 

      setupAds(true); 
    } 
+0

Назначьте weightsum для TableRow и придайте весу изображениям и текстовым изображениям, чтобы они идеально отображались на экране. –

+0

Я так не думаю. вес определяется для количества пространства, которое он займет у своего родителя. –

+0

Я хочу увидеть ваш обновленный код. –

ответ

2

Вы должны сделать это:

TableRow.LayoutParams params = new TableRow.LayoutParams(0,WRAP_CONTENT); 

у вас должны быть параметры макета tablerow для текстовых просмотров.

затем в этом параметрах вы должны добавить вес.

params.weight = 1; 
params.gravity = GRAVITY.CENTER; 

и ваш стол должен иметь гравитационный «центр» для его содержания (не макет гравитации).

Постарайтесь сделать это:

for (Games game : Games.values()) { 
       TableRow newRow = new TableRow(this); 
       newRow.setLayoutParams(tableRowParams); 

TableRow.LayoutParams params2 = new TableRow.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT); 

       params2.weight = .8f; 
       params2.gravity= Gravity.CENTER; 

       String[] words = game.name().split("(?=[A-Z])"); 
       String name = ""; 
       for (String word : words) { 
        if(word.length() < 1) continue; 
        name += word + "\n"; 
       } 

       tv = new TextView(this); 
       tv.setTextSize(fontSize); 
       tv.setText(name); 
       tv.setLayoutParams(params2); 
       newRow.addView(tv); 
       newRow.setWeightSum(6); 

       for (Level level : Level.values()) { 
        ImageView iv = new ImageView(this); 

        iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
        iv.setAdjustViewBounds(true); 
        iv.setLayoutParams(params); 

        tv = new TextView(this); 
        tv.setLayoutParams(params); 
        tv.setText("EASY"); 
        tv.setTextSize(fontSize); 

        if(acheivements.getPassed(level, game))//has achievement 
        { 
         iv.setImageResource(R.drawable.star_gold_full_small); 
        } 
        else { 
         iv.setImageResource(R.drawable.star_gold_empty_small); 
        } 
        newRow.addView(tv); 
       } 
       tbLayout.addView(newRow); 
      } 

В этом коде я создал новый Params макета как params2, потому что TextView использовал вес 1, так что ваши изображения были немного правосторонние. я использовал вес .8f для имен, так что теперь он работает нормально. так делайте согласно вашему req. Надеюсь, что это поможет!

+0

отправьте свое изображение, пожалуйста, чтобы я мог определить проблему. –

+0

Я обновил снова два изображения, один имеет текст, а один имеет звезды (изображения). Вы можете видеть, что текст выравнивается, а изображение - нет. В новой строке, которую я добавил, не хватало weightsum, а также добавляла пустую строку в начало имени игры, которое я удалил. – tsukimi

+0

установите гравитацию в центр в таблице для просмотра изображений, а также используйте вес, используемый в текстовом виде, чтобы оба они получили одинаковое распределение пространства и могли быть одинаковыми. и если вы можете предоставить мне код, я могу помочь вам в этом. –

Смежные вопросы