2013-08-21 76 views
0

这应该很容易,我该如何对齐中间的星星。我在代码中动态添加顶部标题文字视图和星星。我试图在imageview上设置引力不起作用。在桌面布局中对齐imageview

更新:我添加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

将权重分配给TableRow,并给予imageview和textviews权重以在屏幕上完美设置。 –

+0

我不这么认为。体重定义为它将占据其父母的空间量。 –

+0

我想查看您的更新代码。 –

回答

2

你应该这样做:

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

你应该有textview的布局参数textviews。

然后在这个参数中,你应该增加重量。

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); 
      } 

在此代码,我因为TextView中使用的1重量让您的图象是小右胸创造了新的布局PARAMS为params2。我已经使用了.8f的重量名称,所以现在它的工作正常。按照你的要求做。 希望它有助于!

+0

请张贴您的图片,以便我可以确定概率。 –

+0

我再次更新了两张图片,一张是文字,另一张是明星(图片浏览)。你可以看到文本对齐,图像不对。它在我添加的新行上丢失了权重,它还在我删除的游戏名称的顶部添加了一个空行。 – tsukimi

+0

将重力设置为显示在图表中的中心,并且也使用textview中使用的权重,这样两者将获得相同的空间分配并可以对齐。如果你能提供我的代码,那么我可以帮你。 –