2016-09-27 126 views
1

我activity_choose_number1.xml如何將android中checkedTextView的複選框和文本居中?

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

</android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_choose_number1" /> 

這是content_choose_number1.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="horizontal" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.abc.abc.ChooseNumber1" 
    tools:showIn="@layout/activity_choose_number1"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal" 
     android:orientation="horizontal" 
     android:id="@+id/listViewNumberList" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" /> 

</LinearLayout> 

這是secnumsinglechoice.xml

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:checkMark="@null" 
    android:drawableStart="?android:attr/listChoiceIndicatorSingle" 
    tools:targetApi="ice_cream_sandwich" 
    android:textSize="25dp" 
    android:linksClickable="false" 
    android:checked="false" 
    android:paddingTop="20dp" 
    android:paddingBottom="20dp" /> 

secnumsinglechoice.xml是android.R.layout.simple_list_item_single_choice的複製粘貼,並進行了一些更改。

現在我需要的是中心對齊secnumusingchoice.xml的複選框和文本。我還需要複選框,留下文字的側

事情我試過列表視圖中的每一項 1)如果我做drawableLeft,它創建文本和複選框之間的空間,但不會使雙方爲中心 2)如果我添加android:textAlignment =「center」,那麼它仍然中心對齊文本,但不是複選框。 3)我在這裏嘗試center text and checkmark of CheckedTextView,但我想在這裏嘗試更多的代碼。

請幫助。謝謝。

+0

我不知道你是什麼意思「我想與更多的代碼來這裏嘗試」,但你嘗試了'gravity'屬性?例如,'android:gravity =「center_horizo​​ntal」'? –

+0

爲什麼不單獨使用checkbox和textview?嘗試使用'CheckedTextView'很難對齊複選框和文本.. –

+0

@MikeM。是的,儘管我仍然沒有工作。 – user3705478

回答

2

這就是你想要

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:background="@android:color/white" 
     android:gravity="center"> 

     <CheckBox 
      android:id="@+id/ckb" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" /> 

     <TextView 
      android:id="@+id/tvEduName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:text="ABC" 
      android:textSize="17sp" /> 
    </LinearLayout> 

結果

enter image description here

+0

問題是顯示給用戶的選項數量是動態的。例如,對於某些用戶,它可能是5條記錄,對於某些用戶可能是10條記錄等。我無法對選項進行硬編碼,我們也不知道我們將獲得的選項數量。 – user3705478

+0

我認爲這就是爲什麼你使用listview和動態數據的原因。 –

1

要正確地獲得一切中心是什麼,我們將繼承CheckedTextView,並覆蓋其onDraw()方法首先測量組合Drawable和文本寬度和填充,然後在調用super方法之前相應地翻譯Canvas做平局。

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.widget.CheckedTextView; 
import android.text.Layout; 

public class CenteredCheckedTextView extends CheckedTextView { 
    public CenteredCheckedTextView(Context context) { 
     this(context, null); 
    } 

    public CenteredCheckedTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     if (getCompoundDrawables()[0] == null) { 
      super.onDraw(canvas); 
     } 
     else { 
      // Left drawable and paddings width 
      final float dw = getCompoundDrawables()[0].getIntrinsicWidth() + 
          getPaddingLeft() + getCompoundDrawablePadding(); 
      // Text width 
      final float tw = getMaxLineMeasure(); 

      canvas.save(); 
      canvas.translate((getWidth() - (dw + tw))/2f, 0f); 
      super.onDraw(canvas); 
      canvas.restore(); 
     } 
    } 

    private float getMaxLineMeasure() { 
     final Layout layout = getLayout(); 
     final int lines = getLineCount(); 
     float m = 0, max = 0; 

     for (int i = 0; i < lines; ++i) { 
      m = getPaint().measureText(getText(), 
             layout.getLineStart(i), 
             layout.getLineEnd(i)); 
      if (m > max) { 
       max = m; 
      } 
     } 

     return max; 
    } 
} 

CheckedTextViewcheckMarkGravity屬性決定在其結束它把checkMarkDrawable,但它不是公開的,一些奇怪的原因,所以我們只使用drawableLeft。例如:

<com.mycompany.myapp.CenteredCheckedTextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="20dp" 
    android:paddingBottom="20dp" 
    android:textSize="25dp" 
    android:drawableLeft="?android:attr/listChoiceIndicatorSingle" /> 

您可能需要在自定義類的翻譯和/或寬度值略微撥弄得到一切的看上去中心給你排隊,這取決於什麼樣的透明,內在填充Drawable


screenshot

+0

令人信服。我還沒有嘗試過這個解決方案。但是,當你說我需要稍微擺弄寬度值時,如果應用程序在平板電腦或其他屏幕尺寸中使用,對齊看起來會不是居中? – user3705478

+0

我並不是在談論屏幕尺寸,但更多的是關於drawable本身可能在任何一邊都有透明襯墊,這可能會使它看起來有點偏離中心。即使是截圖中的圓形,也會讓我看起來有點右移。只是視覺偏好,真的。沒什麼大不了 –

相關問題