以上就是给各位分享在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)中显示/隐藏项目
- Android 3.0 ActionBar没有显示
- Android Action Bar三点不显示
- Android actionbar有在Android 2.x运行的解决方案吗?
- Android UI ActionBar 功能 - 自动隐藏 Action Bar
在Action Bar Android(3.0)中显示/隐藏项目
<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“问题:”时,旋转效果很好.
解决方法
发生这种情况是因为您有两个具有相同ID的视图.由于它们不是同一类,演员表失败并崩溃.
<item android:id="@+id/menuItemRefresh"
和
<ProgressBar android:id="@+id/menuItemRefresh"
这是你的问题.
Android 3.0 ActionBar没有显示
<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三点不显示
我做了一个自定义菜单(添加的支持库)(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 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的相关知识,请在本站搜索。
本文标签: