`
jean7155
  • 浏览: 63198 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

动态ActionBar

阅读更多
首先介绍一下该应用的主要操作界面
1. ProvinceLayout.java: 主操作界面
2. ProvinceListFragment.java: 列表界面

界面元素的操作:
在“主操作界面”中,包含一个动态加载的ActionBar,以Spinner形式显示。 点击Spinner中的任何一个元素,在“列表界面”中动态显示该元素的子元素列表。

xml文件配置
layout/province_onepane.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    

    <!-- ProvinceListFragment的配置-->
    <fragment android:id="@+id/headlines" 
              android:layout_height="fill_parent"
              android:name="cn.com.demo.android.activity.ProvinceListFragment"
              android:layout_width="match_parent" />
</LinearLayout>



java源码中对ActionBar的操作
1. 创建一个ActionBar的listener
CompatActionBarNavListener.java,接口文件,设置点击ActionBar中的某项时应该自定义的操作。
package cn.com.demo.example;

public interface CompatActionBarNavListener {
	
    public void onCategorySelected(int catIndex);

}


2. 创建一个ActionBar监听的起始类
package cn.com.demo.example;

import android.app.ActionBar.OnNavigationListener;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;

public class CompatActionBarNavHandler implements TabListener, OnNavigationListener {
    // The listener that we notify of navigation events
    CompatActionBarNavListener mNavListener;

    /**
     * Constructs an instance with the given listener.
     *
     * @param listener the listener to notify when a navigation event occurs.
     */
    public CompatActionBarNavHandler(CompatActionBarNavListener listener) {
        mNavListener = listener;
    }

    /**
     * Called by framework when a tab is selected.
     *
     * This will cause a navigation event to be delivered to the configured listener.
     */
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        mNavListener.onCategorySelected(tab.getPosition());
    }

    /**
     * Called by framework when a item on the navigation menu is selected.
     *
     * This will cause a navigation event to be delivered to the configured listener.
     */
    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
        mNavListener.onCategorySelected(itemPosition);
        return true;
    }


    /**
     * Called by framework when a tab is re-selected. That is, it was already selected and is
     * tapped on again. This is not used in our app.
     */
    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // we don't care
    }

    /**
     * Called by framework when a tab is unselected. Not used in our app.
     */
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // we don't care
    }

}


3. 在ProvinceLayout.java中设置ActionBar,并调用监听的方法
public class ProvinceLayout extends Activity
	implements CompatActionBarNavListener{
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.province_layout);
        
        。。。。。。
        
        // 设置动态的ActionBar
        setUpActionBar(mIsDualPane);
        
    }

    void setUpActionBar(boolean showTabs) {
		if (Build.VERSION.SDK_INT < 11) {
			return;
		}
		
		categories = s.getListCursorByLevel(getContentResolver(), 0);
		
		android.app.ActionBar actionBar = getActionBar();
		actionBar.setDisplayShowTitleEnabled(false);
		
		CompatActionBarNavHandler handler = new CompatActionBarNavHandler(this);
		
		actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
		SpinnerAdapter adapter = new SimpleCursorAdapter(
				this, android.R.layout.simple_spinner_item, 
				categories, 
				new String[] {AreaSQLiteHelper.COLUMN_NAMES},
				new int[] {android.R.id.text1}
				);
		actionBar.setListNavigationCallbacks(adapter, handler);
		actionBar.setDisplayUseLogoEnabled(true);
	}
   
       ......
       // 实现监听中的方法
@Override
	public void onCategorySelected(int catIndex) {
		setCategory(catIndex, 0);
	}

void setCategory(int index, long id) {
                // 找到ProvinceListFragment, 调用该list的方法刷新列表
		mHeadlinesFragment = (ProvinceListFragment) getFragmentManager().findFragmentById(R.id.headlines);
		mHeadlinesFragment.list(index);
		
	
	}

}


附件中的例子是一个很详细的介绍如何使用ActionBar的实例,可以Tab形式显示,也可以List形式显示。 根据这个例子,我把静态显示部分改成了动态显示。
分享到:
评论

相关推荐

    Actionbar+动态fragment导航栏

    在Android应用开发中,"Actionbar+动态fragment导航栏"是一个常见的设计模式,它结合了UI元素和数据的动态更新,以提供用户友好的交互体验。这个项目的核心知识点包括Actionbar的使用、Fragment的动态管理和网络请求...

    自定义 actionbar 和 修改actionbar 样式

    3. 动态修改:在代码中,可以通过`getSupportActionBar().setBackgroundDrawable()`方法来动态改变ActionBar的背景。 例如,你可以创建一个名为`styles.xml`的文件,然后定义如下样式: ```xml &lt;!-- 其他主题...

    动态改变ActionBar的图标

    本篇文章将深入探讨如何动态地改变`ActionBar` 的图标,并利用`ActionView` 来展示一个`ProgressBar`。 首先,我们需要理解`ActionBar` 的基本概念。`ActionBar` 提供了应用的上下文信息,包括应用的标题、徽标、...

    android4.0 actionbar API

    - **动态隐藏/显示 ActionBar**:在运行时,可以通过调用 `ActionBar.hide()` 和 `ActionBar.show()` 方法来动态控制 ActionBar 的可见性。 - **增加 Action Item**: - **Action Item 定义**:实质上是一个 ...

    自定义ActionBar标题居中显示

    如果需要动态改变标题,可以直接修改`titleView`的文本内容。 通过这种方式,我们成功地实现了自定义ActionBar标题居中显示的效果。需要注意的是,这种方法适用于支持库版本在v7以上的情况。对于更老的API版本,...

    通过判断editview是否为空动态修改actionbar的控件是否可见

    本教程将深入探讨如何根据EditText的内容是否为空来动态控制ActionBar上的控件可见性。 首先,我们需要理解EditText和ActionBar的基本概念。EditText是Android中用于输入文本的视图,它可以是单行或多行的输入框。...

    android ActionBar使用示例

    - **修改标题和图标**:使用`setTitle()`和`setIcon()`方法,可以动态地更改ActionBar的标题和图标。 - **切换ActionBar的存在与否**:通过`setDisplayShowHomeEnabled()`和`setDisplayHomeAsUpEnabled()`等方法,...

    郭霖所写的关于ActionBar解析和实战博客中的源码

    2. **代码动态设置**:通过Java代码,可以使用`getSupportActionBar()`或`getActionBar()`方法获取到ActionBar实例,然后调用相关方法进行设置,如`setTitle()`, `setIcon()`等。 3. **菜单项**:ActionBar中的菜单...

    Android ActionBar学习源代码

    或者在Java代码中通过`requestWindowFeature(Window.FEATURE_ACTION_BAR)`来动态开启。 2. **自定义标题和Logo**:可以使用`setSupportActionBar()`方法设置ActionBar,然后通过`setTitle()`和`setLogo()`分别修改...

    Android--ActionBar

    ActionBar不仅提供了一个统一的外观和感觉,还支持动态地添加和移除菜单项,使得应用程序界面更加灵活。 ### 二、ActionBar的自动包含与主题关系 当你的应用程序目标最低SDK版本设置为Android 3.0或更高时,...

    ActionBar的基本功能

    10. **动态改变ActionBar** - 在运行时,你可以根据应用状态改变ActionBar的内容,例如,当用户登录后,可以在ActionBar上显示用户名。 在“MyActionBar”示例中,开发者可能已经展示了如何创建、定制和使用...

    android--actionbar

    在`RadioButton`切换时,可以动态替换`FrameLayout`中的`Fragment`来改变显示的内容。 `Example-6`可能是示例代码或项目,这部分无法提供详细信息,但通常会包含如何实现上述功能的代码片段。开发者可以参考这些...

    ActionBar-PullToRefresh 下拉刷新,ActionBar出现加载中提示

    `ActionBar-PullToRefresh` 是一个开源库,专门用于实现一个常见的功能:在列表视图(ListView)上进行下拉刷新操作,并且在刷新过程中,ActionBar 会显示一个加载中的提示。这个功能使得用户能够直观地看到数据正在...

    ActionBar定制

    3. 菜单项图标和文字可以自定义,也可以动态改变其可见性和状态。 四、显示与隐藏 1. 使用`show()`、`hide()`或`setDisplayOptions()`方法控制ActionBar的显示和隐藏,以及决定显示哪些元素(如标题、Home图标等)...

    actionbar实现顶部导航

    8. **动态加载和隐藏ActionBar**:根据应用需求,可以使用`getSupportActionBar().show()`和`getSupportActionBar().hide()`方法来控制`ActionBar`的可见性。 通过以上知识点,我们可以实现一个具有顶部导航功能的...

    ActionBar效果

    - **优势**:ActionBar提供更简洁、高效的导航方式,可以动态添加和移除选项,支持滑动切换,且更易于定制和美化。 3. **使用步骤** - **启用**:在AndroidManifest.xml中设置标签,指定minSdkVersion至少为11或...

    actionbar demo

    可能一个是基本的ActionBar实现,另一个则包含了更复杂或定制化的功能,如使用 SherlockActionBar 库来支持更低版本的Android系统,或者展示如何动态添加和管理菜单项。 在Android开发中,ActionBar的知识点包括但...

    ActionBar小例子

    综上所述,这个"ActionBar小例子"涵盖了`ActionBar`的基本自定义,包括主题、样式、菜单项、动态操作等方面。通过这些实践,开发者可以更好地理解和掌握`ActionBar`的使用,提升应用程序的用户体验。

    ActionBar和Fragment的经典实例

    开发者可以在Activity的`onCreateOptionsMenu()`方法中动态地创建菜单项,然后在`onOptionsItemSelected()`中处理用户的点击事件。`Tag`则常用于识别和管理`Fragment`,它可以在`Fragment`实例化时设置,以便在后续...

    actionbar练习

    在Android应用开发中,ActionBar是一个重要的组件,它位于应用程序界面的顶部,提供了用户与应用交互的多种功能。这个“actionbar练习”显然是一份关于如何使用和自定义Android Action Bar的示例项目。下面,我们将...

Global site tag (gtag.js) - Google Analytics