Доступ к представлению внутри ActionBar - PullRequest
3 голосов
/ 17 августа 2011

Я пытаюсь добавить горизонтальный индикатор выполнения на мой вид, например:

Рез / menu.xml

<item   android:id="@+id/menuItemProgress"
        android:title="Progress"
        android:actionLayout="@layout/component_cancellable_progressbar"
        android:showAsAction="always"/>

component_cancellable_progressbar.xml

<FrameLayout    xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/searchProgressWrapper"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content">
<ProgressBar    android:id="@+id/searchProgress"
                android:layout_height="30dp"
                android:layout_width="150dp"
                style="@style/Custom.Widget.ProgressBar.Horizontal"
                android:max="100" />
<ImageView      android:id="@+id/cancelSearch"
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content"
                android:paddingRight="8dp" 
                android:layout_gravity="right|center_vertical" 
                android:src="@android:drawable/ic_notification_clear_all"
                android:scaleType="fitXY" />
</FrameLayout>

Как получить доступ к этому ProgressBar из действия (чтобы сделать его видимым / невидимым / прогрессом)?

Ответы [ 4 ]

5 голосов
/ 25 августа 2013

можно получить вид элемента действия.

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

итак, как ты можешь это сделать?

вот пример кода:

public boolean onCreateOptionsMenu(final Menu menu) {
  getSupportMenuInflater().inflate(R.menu.main, menu);
  new Handler().post(new Runnable() {
    @Override
    public void run() {
      final View syncItemView = findViewById(R.id.action_search);
      ...

это было проверено при использовании библиотеки actionBarSherlock на android 4.1.2 и android 2.3.5.

другой альтернативой является использование более обширного способа, используемого в библиотеке showcaseView , здесь .

2 голосов
/ 23 июля 2013

Вы можете переопределить onCreateOptionsMenu и поймать ваш взгляд там:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  menu.getItem(0).getActionView();
  ...

или с помощью поиска по идентификатору

View v = (View) menu.findItem(R.id.search).getActionView();

Я вставил в панель действий собственное выпадающее меню и смог таким образом получить контроль над ним.

1 голос
/ 17 августа 2011

onCreate () и после этого вы можете просто получить к нему доступ через findViewById (), как обычно. Проблема была вызвана чем-то другим.

0 голосов
/ 17 августа 2011

Ниже приведена очень полезная ссылка для actionBar. Надеюсь, вы сможете реализовать то, что вы хотите.

http://thiranjith.wordpress.com/2011/07/15/actionbar-design-pattern-example-for-android/

public class ActionBar extends FrameLayout {

      private ProgressBar mProgress;



      public ActionBar(Context context, AttributeSet attrs) {

        super(context, attrs);

        mInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       FrameLayout barView = (RelativeLayout) mInflater.inflate(R.layout.actionbar, null);

        addView(barView);

       mProgress = (ProgressBar) barView.findViewById(R.id.actionbar_progress);

    public void showProgressBar() { ... }

    public void hideProgressBar() { ... }

    public boolean isProgressBarVisible() { ... }


}

Затем из вашей активности управляйте панелью прогресса, как показано ниже.

public class MainActivity extends Activity {

    private ActionBar mActionBar;



    @Override

    public void onCreate(Bundle savedInstanceState) {
        mActionBar = (ActionBar) findViewById(R.id.actionBar);

        mActionBar.showProgressbar()

     }

}
...