GVKun编程网logo

在Action Bar Android(3.0)中显示/隐藏项目

13

以上就是给各位分享在ActionBarAndroid(3.0)中显示/隐藏项目,同时本文还将给你拓展Android3.0ActionBar没有显示、AndroidActionBar三点不显示、Andr

以上就是给各位分享在Action Bar Android(3.0)中显示/隐藏项目,同时本文还将给你拓展Android 3.0 ActionBar没有显示、Android Action Bar三点不显示、Android actionbar有在Android 2.x运行的解决方案吗?、Android UI ActionBar 功能 - 自动隐藏 Action Bar等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

在Action Bar Android(3.0)中显示/隐藏项目

在Action Bar Android(3.0)中显示/隐藏项目

我正在使用内置的操作栏.我想在获取数据时在操作栏中显示动画加载器,并在不显示时显示“刷新”图标.我找到的简单方法是使用2个菜单项并显示一个/隐藏另一个菜单项然后相反.所以这是我的菜单:

<item android:id="@+id/menuItemRefresh" 
      android:title="Refresh" 
      android:showAsAction="always" 
      android:icon="@drawable/ic_menu_refresh"
      android:visible="false" />
<item android:id="@+id/menuItemProgress"
      android:actionLayout="@layout/progress"
      android:showAsAction="always"
      android:visible="true" />

我正在使用actionLayout(如您所见),因为我没有弄清楚如何在菜单中创建不确定的进度条旋转.这是相应的actionLayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/layoutProgress" >

    <ProgressBar
        android:id="@+id/menuItemRefresh"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginLeft="13dp"
        android:layout_marginRight="13dp" />

</LinearLayout>

我的活动:

public class MainActivity extends Activity implements OnItemClickListener
{
    Handler             handler;
    MenuItem            menuItemProgress;
    MenuItem            menuItemRefresh;

    int                 currentPage;
    List<CloudAppItem>  items;
    boolean             currentlyLoading    = false;
    ListView            listView;
    FilesAdapter        filesAdapter;
    LinearLayout        emptyView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        Log.i("MainActivity","Started");

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        setHandler();
        setListing();

        loadItems();
    }

    @Override
    protected void onResume()
    {
        super.onResume();

        if (isFirstRun() && haveCredentialsChanged())
        {
            setFirstRun(false);
        }

        if (isFirstRun())
        {
            firstRun();
        }
        else if (haveCredentialsChanged())
        {
            setCredentialsChanged(false);
            loadFiles(true,0);
        }
        else
        {
            loadFiles(false,0);
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance()
    {
        return items;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {               
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu,menu);

        this.menuItemProgress = menu.findItem(R.id.menuItemProgress);
        this.menuItemRefresh = menu.findItem(R.id.menuItemRefresh);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onoptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
            case R.id.menuItemPreferences:

                startActivity(new Intent(MainActivity.this,PreferencesActivity.class));

            break;

            case R.id.menuItemRefresh:

                loadFiles(true,0);

            break;
        }

        return false;
    }

    private boolean isFirstRun()
    {
        return Prefs.getPreferences(this).getBoolean(Prefs.FirsT_RUN,true);
    }

    private void firstRun()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("First run");
        builder.setCancelable(false);
        builder.setPositiveButton("ok",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,int which)
            {
                startActivity(new Intent(MainActivity.this,PreferencesActivity.class));
            }
        });

        AlertDialog alert = builder.create();
        alert.show();
    }

    private void setFirstRun(boolean b)
    {
        Prefs.getPreferences(this).edit().putBoolean(Prefs.FirsT_RUN,b).commit();
    }

    private boolean haveCredentialsChanged()
    {
        return Prefs.getPreferences(this).getBoolean(Prefs.CREDENTIALS_CHANGED,false);
    }

    private void setCredentialsChanged(boolean b)
    {
        Prefs.getPreferences(this).edit().putBoolean(Prefs.CREDENTIALS_CHANGED,b).commit();
    }

    private void setListing()
    {
        listView = (ListView) findViewById(R.id.listView);
        emptyView = (LinearLayout) findViewById(R.id.emptyView);
        listView.setonItemClickListener(this);
        listView.setEmptyView(emptyView);
    }

    @SuppressWarnings("unchecked")
    private void loadItems()
    {
        Object obj = getLastNonConfigurationInstance();
        if (obj != null)
        {
            items = (List<CloudAppItem>) obj;
            MainActivity.this.handler.sendEmptyMessage(0);
        }
        else
        {
            if (!isFirstRun())
                loadFiles(true,0);
        }
    }

    private void showProgressIcon(boolean show)
    {
        if(this.menuItemProgress != null && this.menuItemRefresh != null)
        {                       
            if(show)
            {               
                this.menuItemProgress.setVisible(true); 
                this.menuItemRefresh.setVisible(false);                         
            }
            else
            {
                this.menuItemRefresh.setVisible(true);

                // PROBLEM : LINE TRIGGERING ERROR
                this.menuItemProgress.setVisible(false);    
            }
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3)
    {
        if(this.items.get(arg2).isFake())
        {
            filesAdapter.lastItemloading = true;
            filesAdapter.notifyDataSetChanged();

            int page = (int)(this.items.size()/Integer.valueOf(Prefs.getPreferences(this).getString(Prefs.FILES_PER_REQUEST,"20")))+1;     
            loadFiles(false,page);
        }
        else
        {
            startActivity(new Intent(this,FileInfosActivity.class));
        }               
    }

    /**
     * @param reload : clean the list before loading new items
     * @param page : if 0,items are prepended,else,items are appended
     */
    private void loadFiles(final boolean reload,final int page)
    {               
        if (!currentlyLoading)
        {           
            currentlyLoading = true;
            showProgressIcon(true);

            new Thread(new Runnable() {
                @Override
                public void run()
                {
                    // REQUESTING WEB SERVICE HERE

                    MainActivity.this.handler.sendEmptyMessage(0);                      
                }
            }).start();
        }
    }

    private void setHandler()
    {
        this.handler = new Handler() {

            @Override
            public void handleMessage(Message msg)
            {
                currentlyLoading = false;                               

                if (filesAdapter == null)
                {
                    filesAdapter = new FilesAdapter(MainActivity.this,MainActivity.this.items);
                    listView.setAdapter(filesAdapter);
                }
                else
                {   
                    filesAdapter.refill(MainActivity.this.items);
                }

                // PROBLEM : LINE TRIGGERING ERROR
                showProgressIcon(false);
            }
        };
    }
}

当我运行应用程序时,一切都很好并且正常工作.
旋转手机时出现问题.

堆栈跟踪:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.quanturium.androcloud/com.quanturium.androcloud.MainActivity}:
java.lang.classCastException: android.view.AbsSavedState$1 cannot be cast to
android.widget.ProgressBar$SavedState
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1955)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
at android.app.ActivityThread.handlerelaunchActivity(ActivityThread.java:3347)
at android.app.ActivityThread.access$700(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1150)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.classCastException: android.view.AbsSavedState$1 cannot be cast to
android.widget.ProgressBar$SavedState
at android.widget.ProgressBar.onRestoreInstanceState(ProgressBar.java:1093)
at android.view.View.dispatchRestoreInstanceState(View.java:9876)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.View.restoreHierarchyState(View.java:9854)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1625)
at android.app.Activity.onRestoreInstanceState(Activity.java:906)
at android.app.Activity.performRestoreInstanceState(Activity.java:878)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1100)
at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1933)
... 12 more

actionLayout(@ id / menuItemProgress)似乎导致了问题.刷新项目(@ id / menuItemRefresh)一切都很好.我写的是问题的评论.当我评论OUT“问题:”时,旋转效果很好.

解决方法

Android似乎无法恢复您的视图已保存状态.

发生这种情况是因为您有两个具有相同ID的视图.由于它们不是同一类,演员表失败并崩溃.

<item android:id="@+id/menuItemRefresh"

<ProgressBar
       android:id="@+id/menuItemRefresh"

这是你的问题.

Android 3.0 ActionBar没有显示

Android 3.0 ActionBar没有显示

我的应用程序兼容 Android 2.x到4.x:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="15"
/>

对于我的应用程序主题,我正在使用Android dev website上建议的选择器主题:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/LightThemeSelector"
>

我有几个/ res / values- *目录来控制不同大小/版本的Android设备上的样式.例如,在/res/values-large.xml中我有选择器选择旧的Android Light主题:

<style
    name="LightThemeSelector"
    parent="android:Theme.Light"
>
    <item name="android:windowNoTitle">true</item>
</style>

但是,在我的/res/values-sw720dp.xml(和/res/values-sw600dp.xml)中,我有选择器选择新的Android Holo.Light主题,它应该自动为我提供一个ActionBar:

<style
    name="LightThemeSelector"
    parent="android:Theme.Holo.Light"
>
    <item name="android:windowNoTitle">true</item>
</style>

但是,当我在XOOM模拟器上运行应用程序时,它不会显示ActionBar.如果我将Manifest文件设置为直接指定Theme.Holo.Light,那么当我在XOOM模拟器中运行时,我会得到ActionBar.

解决方法

你的主要问题是这一行:

< item name =“android:windowNoTitle”> true< / item>

将其设置为true时,它会隐藏ActionBar.

只需将其设置为false即可设置.

Android Action Bar三点不显示

Android Action Bar三点不显示

请帮忙,
我做了一个自定义菜单(添加的支持库)(name-> main_activity_actions.xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto"  >

<item
    android:id="@id/search"
    android:icon="@drawable/search"
    android:title="@string/search"
    yourapp:showAsAction="ifRoom" />
<item
    android:id="@id/view_all"
    android:title="@string/view_all"
    yourapp:showAsAction="never"/>
<item
    android:id="@+id/action_settings"
    yourapp:showAsAction="never"
    android:title="@string/action_settings"/>

现在我该怎么做,将action_settings放入三个点(动作栏),而不是硬件菜单按钮(没有任何黑客).

主要活动

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_activity_actions,menu);
    return true;
}

好吧,我找到了黑客,但如果有任何其他方式然后让我知道,

将此代码放在onCreate中

try {
        ViewConfiguration config = ViewConfiguration.get(this);
        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
        if(menuKeyField != null) {
            menuKeyField.setAccessible(true);
            menuKeyField.setBoolean(config,false);
        }
    } catch (Exception ex) {
        // Ignore
    }

为此,您需要导入

import java.lang.reflect.Field;
import android.view.ViewConfiguration;

解决方法

没有任何黑客,你不能在所有设备上这样做.那些具有硬件菜单按钮的设备(我不知道是否绝对全部)将使用它而不是溢出按钮(…).

哪一种,是一件好事.这些设备的用户用于按菜单按钮进入菜单.所以对他们来说,缺少溢出按钮是正常的行为.

对于那些使用溢出按钮的设备,Android将根据您在showAsAction标签中的提示来决定自己的内容.这取决于屏幕尺寸,方向等等. This page有一张表,显示有多少个图标显示(其余的显示到溢出菜单).

Android actionbar有在Android 2.x运行的解决方案吗?

Android actionbar有在Android 2.x运行的解决方案吗?

    如题

Android UI ActionBar 功能 - 自动隐藏 Action Bar

Android UI ActionBar 功能 - 自动隐藏 Action Bar

为了使 ActionBar 不影响 Activity 的布局内容,我们还可以设置 ActionBar,将其设置为透明,并且让 Activity 是头部自动空出一个 ActionBar 的空间:


官方文档:http://wear.techbrood.com/training/basics/actionbar/overlaying.html#EnableOverlay

在应用程序里面,我们添加了一个背景:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" >

	<ImageView android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:background="@drawable/bg2"/>

</RelativeLayout>
然后自定义一个主题 values/themes.xml,继承自 Theme.Holo

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>
这样就可以实现 ActionBar 是透明效果:

让其背景让出一个 ActionBar 的位置 ,在 Activity 布局文件中让其 android:paddingTop="?android:attr/actionBarSize"

然后查看效果:



今天关于在Action Bar Android(3.0)中显示/隐藏项目的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android 3.0 ActionBar没有显示、Android Action Bar三点不显示、Android actionbar有在Android 2.x运行的解决方案吗?、Android UI ActionBar 功能 - 自动隐藏 Action Bar的相关知识,请在本站搜索。

本文标签: