2014-05-13 26 views
0

我想顯示一行數字,每行都打印在不同圓的中心。但是,該組的大小由用戶輸入確定。我所取得的成績是:Android:TextView中圓的半徑始終由TextView寬度和高度固定

  RelativeLayout myLayout = (RelativeLayout)findViewById(R.id.layout1); 

      // Creating a new TextView 
      TextView[] tv = new TextView[size+1]; 
      TextView temptv; 

      for (i = 1; i <= size; i++) { 
       temptv = new TextView(MainActivity.this); 
       RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

       if (i > 1) { 
        lp.addRule(RelativeLayout.BELOW, R.id.textView5); 
        lp.addRule(RelativeLayout.RIGHT_OF, tv[i-1].getId()); 
       } 
       else { 
        lp.addRule(RelativeLayout.BELOW, R.id.textView5); 
        lp.addRule(RelativeLayout.ALIGN_LEFT, R.id.textView5); 
       } 

       // width of Text 
       temptv.setWidth(60); 
       temptv.setHeight(60); 
       // size of Text 
       temptv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25); 
       temptv.setGravity(Gravity.CENTER|Gravity.CENTER_VERTICAL); 
       temptv.setLayoutParams(lp); 
       myLayout.addView(temptv, lp); 

       answer = "<font color='#000000'>" + mynum[i] + "</font>"; 

       // Update the label with our dynamic answer 
       temptv.setText(Html.fromHtml(answer)); 

       temptv.setBackgroundResource(R.drawable.circle1); 

       tv[i] = temptv; 
       tv[i].setId(i); 

      } 

它工作正常,但有一個問題。圓的半徑始終是TextView寬度或高度的一半。因此,在上述情況下,半徑始終是30,就像這張照片:pic1

如果TextView的寬度和高度是不同的(例如,使用temptv.setWidth(75);temptv.setHeight(50);),然後我得到的橢圓形,像這樣的畫面:pic2 http://i841.photobucket.com/albums/zz337/lilpengi/number2_zps767ec27f.png在我的circle1.xml形狀設置

不論:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
<corners android:radius="25dip"/> 
<stroke android:color="#c00000" android:width="5dip"/> 
<solid android:color="#ffffff"/> 
</shape> 

無論我設定在半徑,10,25,50,其結果是一樣的。我的代碼出了什麼問題?

+0

你能張貼你現在得到的PIC ? – adriannieto

+0

@cRaZyByTe增加了兩張照片,希望他們幫助。 – LaBird

+0

如果你希望它們相同,爲什麼要設置寬度和高度不同? – ashishduh

回答

2

對於標準的Android小部件,它似乎是不可能的,因爲您正在組件周圍繪製「橢圓形」。

橢圓形可以成爲一個圓形,因爲圓形是高度等於寬度的專業化。我的建議是重新實現組件大小的計算方式。只是一直通過覆蓋onMeasure方形佈局(這裏是更簡單的方法,請點擊下方的鏈接):

class SquareTextView extends TextView{ 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     int size = 0; 
     int width = getMeasuredWidth(); 
     int height = getMeasuredHeight(); 

     if (width > height) { 
      size = height; 
     } else { 
      size = width; 
     } 
     setMeasuredDimension(size, size); 
    } 
} 

http://www.jayway.com/2012/12/12/creating-custom-android-views-part-4-measuring-and-how-to-force-a-view-to-be-square/

相關問題