访问ActionBar中的视图

时间:2011-08-17 08:04:28

标签: android android-actionbar

我正在尝试将水平进度条添加到我的视图中,如下所示:

RES / 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>

如何从Action中访问此ProgressBar(使其成为Visisble / Invisible / Progress)?

4 个答案:

答案 0 :(得分:5)

可以获取操作项的视图。

然而,请注意有时候动作项会出现在溢出菜单中,所以你可能会得到一个null。

所以,你怎么能这样做?

这是一个示例代码:

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

在Android 4.1.2和android 2.3.5上使用actionBarSherlock库时进行了测试。

另一种方法是使用更广泛的方式,在showcaseView libraryhere上使用。

答案 1 :(得分:2)

您可以覆盖onCreateOptionsMenu并在那里捕捉您的视图:

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

或搜索id

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

我在操作栏中插入了一个自定义下拉菜单,并且能够以这种方式控制它。

答案 2 :(得分:1)

onCreate()之后你就可以像普通的那样通过findViewById()简单地访问它了。问题是由其他原因引起的。

答案 3 :(得分:-1)

以下是actionBar.Hope的一个非常有用的链接,您将能够实现您想要的。

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()

     }

}