2010-12-20 83 views
12

我想在activity的某些處理過程中在editText的右側顯示progressbar(微調),並在完成時隱藏,有沒有簡單的方法來做到這一點?android progressbar inside edittext

回答

25

我會用RelativeLayout,像這樣:

<RelativeLayout> 
    <EditText 
     android:id="@+id/the_id"/> 
    <ProgressBar 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_alignTop="@id/the_id" 
     android:layout_alignBottom="@id/the_id" 
     android:layout_alignRight="@id/the_id"/> 
</RelativeLayout> 
+0

謝謝那正是我一直在尋找 – mkso 2010-12-20 22:24:26

7

嘗試......

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <EditText 
       android:id="@+id/editText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_margin="8dp" 
       android:ems="10" 
       android:hint="@string/app_name" 
       android:inputType="textNoSuggestions" 
       android:padding="8dp" > 
      </EditText> 

      <ProgressBar 
        style="?android:attr/progressBarStyleInverse" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignBottom="@id/editText" 
        android:layout_alignRight="@id/editText" 
        android:layout_alignTop="@id/editText" /> 
      </RelativeLayout> 
     </LinearLayout> 
3

晚的答案,但是,也許有人會利用這一點。

我創建了一個新的視圖,實際上是爲我完成這項工作。

所以,首先,創建佈局XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 

<com.view.InstantAutoComplete 
    android:id="@+id/custom_edit_text_edit_text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="@dimen/layout_padding"/> 

<ProgressBar 
    android:id="@+id/custom_edit_text_progress_bar" 
    style="@style/SmallProgressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:visibility="gone"/> 

</RelativeLayout> 

現在,一個java類:

public class CustomEditText extends RelativeLayout { 

    private LayoutInflater mInflater = null; 
    private AutocompleteEditText mEditText; 
    private ProgressBar mProgressBar; 
    private boolean mIsRefreshing = false; 


    private int textColor; 

    private int hintTextColor; 
    private String hint; 

    private int textSize; 

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

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initViews(attrs); 
    } 

    private void initViews(AttributeSet attrs) { 
     mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mInflater.inflate(R.layout.custom_layout_edit_text, this, true); 
     mEditText = (AutocompleteEditText) findViewById(R.id.custom_edit_text_edit_text); 
     mProgressBar = (ProgressBar) findViewById(R.id.custom_edit_text_progress_bar); 

     mProgressBar.getLayoutParams().height = mEditText.getLayoutParams().height - 30; 
     mProgressBar.getLayoutParams().width = mEditText.getLayoutParams().height - 30; 
     mProgressBar.requestLayout(); 


     TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.CustomEditText, 0, 0); 
     try { 
      textColor = a.getInteger(R.styleable.CustomEditText_textColor, R.color.black); 
      hint = a.getString(R.styleable.CustomEditText_hint); 
      hintTextColor = a.getInteger(R.styleable.CustomEditText_hintTextColor, R.color.black); 
      textSize = a.getDimensionPixelSize(R.styleable.CustomEditText_textSize, R.dimen.text_medium_size); 
     } finally { 
      a.recycle(); 
     } 

     mEditText.setTextColor(textColor); 
     mEditText.setHint(hint); 
     mEditText.setHintTextColor(hintTextColor); 
     mEditText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); 
    } 

    public void setRefreshing(boolean isVisible) { 
     if (isVisible) { 
      if (!mIsRefreshing) { 
       mIsRefreshing = true; 
       mProgressBar.setVisibility(VISIBLE); 
      } 
     } else { 
      if (mIsRefreshing) { 
       mIsRefreshing = false; 
       mProgressBar.setVisibility(GONE); 
      } 
     } 


    } 

    public AutocompleteEditText getEditText() { 
     return mEditText; 
    } 

    public ProgressBar getProgressBar() { 
     return mProgressBar; 
    } 
} 

定義你的屬性,所以你可以在XML中使用它。

<com.CustomEditText 
        android:id="@+id/reply_to_request_main_course_edit_text" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_margin="@dimen/layout_padding" 
        android:layout_weight="1" 
        app:textColor="@color/black" 
        app:textSize="@dimen/text_medium_size"/> 

您在活動/片段instansiate對象:在你的價值觀的文件夾,創建一個.xml文件名爲ATTRS:像

<resources> 

    <declare-styleable name="CustomEditText"> 
     <attr name="hint" format="string"/> 
     <attr name="textColor" format="color"/> 
     <attr name="textSize" format="dimension"/> 
     <attr name="hintTextColor" format="color"/> 
    </declare-styleable> 

</resources> 

最後,在你使用它的活性/片段。當你要撥打的進度欄是可見的,只需鍵入

mEditText.setRefreshing(true/false); 
+0

您可以添加您所使用的color.xml和dimen.xml值? – 4gus71n 2016-12-27 21:08:01