问题摘要:如何在Chrome应用程序中进行ProgressBar集成ActionBar?
详细信息:请查看Chrome的此屏幕截图:

我想像这样创建一个Action Bar.在Action Bar的下方,有一个ProgressBar根据页面加载填充.我从很多应用程序中看过这个例子,比如Feedly,但是我无法创建自己的实现.我尝试使用Android自己的API来创建它:
@Override
protected void onCreate(Bundle savedInstanceState) {
//Request Permission to display the Progress Bar...
this.requestWindowFeature(Window.FEATURE_PROGRESS);
this.setWindowContentView(R.layout.activity_main)
super.onCreate(savedInstanceState);
this.setProgressBarIndeterminate(true);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码只会导致ProgressBar显示在 Action Bar上,如下所示:

那么,如何让我的ProgressBar出现在Action Bar下,就像Chrome应用程序一样?
我目前正在使用ActionBar菜单项在操作栏中显示SearchView.当搜索菜单项被展开时,显示软键盘,这就是我想要的.现在,当用户按下后退按钮关闭软键盘时,我还想在操作栏中折叠SearchView.
我尝试在MenuItem和ActionView上实现以下侦听器OnKeyListener和OnFocusChangeListener.我也尝试在Activity中使用OnBackPressed().以上都没有检测到后退按钮用于关闭软键盘的时间.
有任何想法吗?
我已经实现了OnActionExpandListener来了解SearchView何时可见.
我需要同时显示icon和title行动中ActionBar.
我试过" withText"选项,但它没有效果.

android android-ui android-layout actionbarsherlock android-actionbar
我在谷歌的收件箱应用程序中看到,编写一个新的电子邮件,在工具栏中而不是后退按钮(箭头),它有一个"关闭"按钮(见图片).
我怎样才能做到这一点?

我有一个Activity加载到的地方ListFragment,在点击时,它向下钻取一个级别,显示一个新类型ListFragment,替换原来的(使用showFragment下面的方法).这是放在后面的堆栈上.
开始时,活动会在操作栏中显示默认标题(即根据应用程序自动设置android:label).
显示层次结构中下一级别的列表时,单击的项目名称应成为操作栏的标题.
但是,按下时Back,我希望恢复原始默认标题.这不是什么FragmentTransaction知道的,所以标题不会恢复.
我模糊地读过FragmentBreadCrumbs,但这似乎需要使用自定义视图.我正在使用ActionBarSherlock,并且更愿意没有我自己的自定义标题视图.
这样做的最佳方式是什么?是否有可能没有大量的样板代码并且必须跟踪沿途显示的标题?
protected void showFragment(Fragment f) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, f);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud) android android-fragments actionbarsherlock android-actionbar
我正在使用工具栏作为活动中的操作栏.我正在尝试将该方法添加getActionBar().setDisplayHomeAsUpEnabled(true);到Activity.java文件中以用于较旧设备的向上导航.
该方法在Android Studio中生成以下错误消息:
方法调用可能会产生java.lang.NullPointerException
工具栏上的向上导航在较新的设备上运行良好...现在我正在试图弄清楚如何确保它适用于旧设备.请指教.
来自build.gradle:
dependencies {
compile "com.android.support:appcompat-v7:22.1.0"
}
Run Code Online (Sandbox Code Playgroud)
来自AndroidManifest.xml:
android:theme="@style/Theme.AppCompat.NoActionBar.FullScreen"
Run Code Online (Sandbox Code Playgroud)
来自styles.xml
<style name="Theme.AppCompat.NoActionBar.FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
Run Code Online (Sandbox Code Playgroud)
来自Activity.java
public class CardViewActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cardviewinput);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
// Up navigation to the parent activity for 4.0 and earlier
getActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationIcon(R.drawable.ic_action_previous_item);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个活动,A和B.当活性A被第一次启动,它访问Intent传递给它(因为Bundle是null,因为它应该通过在第一时间),并相应地显示信息:
CustInfo m_custInfo;
...
protected void onCreate(Bundle savedInstanceState)
{
...
Bundle bundle = (savedInstanceState == null) ? getIntent().getExtras() : savedInstanceState;
m_custInfo = (CustInfo) m_bundle.getSerializable("CustInfo");
if (m_custInfo != null
...
}
Run Code Online (Sandbox Code Playgroud)
这在第一次通过时工作正常.该EditText控制和ListView正确地填写.
现在,当单击列表中的项目时,将启动活动B以显示详细信息:
m_custInfo = m_arrCustomers.get(pos);
Intent intent = new Intent(A.this, B.class);
intent.putExtra("CustInfo", m_custInfo); // CustInfo is serializable
// printing this intent, it shows to have extras and no flags
startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
在acivity B启动之前,框架调用A被覆盖onSaveInstanceState():
protected void onSaveInstanceState(Bundle outState)
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用推荐的Up Navigation方法,我的代码如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent h = new Intent(ShowDetailsActivity.this, MainActivity.class);
h.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(h);
return true;
default: return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
这是用例:
问题是在我点击UP之后,MainActivity再次点击其onCreate()方法并失去所有状态而不是从典型的onResume()开始,就像我刚刚从ShowDetailsActivity调用"finish()"一样.为什么?它是如何工作的,这是Android重新创建使用"向上"导航方法导航到的所有活动的预期行为?如果我点击后退按钮,我会得到预期的onResume生命周期.
如果Android"正确"的不存在,这是我的解决方案:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = new Intent(this, MainActivity.class);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
NavUtils.navigateUpTo(this, upIntent);
finish();
} else {
finish();
}
return true;
default: return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud) 在Android中,扩展Lifecycler Activity,Activity,ActionBarActivity和AppCompactActivity之间的主要区别是什么?这些类在使用方面有何不同?
android android-fragments android-activity android-actionbar