我正在为应用创建框架,并希望隐藏登录活动的操作栏。该应用程序将完全由片段组成,因为它们非常棒。
我可以隐藏操作栏以适应我的活动,但每次运行应用程序时,我都会看到我膨胀的空白片段和默认操作栏大约2秒钟,然后才能设置充气登录片段。
关于我应该如何/在哪里隐藏动作栏,(同时保持我的框架)阻止这种情况发生的任何想法?
LoginActivity.java
public class LoginActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new LoginFragment();
}
}
SingleFragmentActivity.java
public abstract class SingleFragmentActivity extends ActionBarActivity {
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(this instanceof LoginActivity){
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
}
setContentView(R.layout.activity_fragment);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if (fragment == null) {
fragment = createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer, fragment)
.commit();
}
}
}
LoginFragment.java
public class LoginFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_login, parent, false);
return v;
}
}
我最初使用SingleFragmentActivity扩展FragmentActivity并在if语句中执行此操作:
requestWindowFeature(Window.FEATURE_NO_TITLE);
但我有一种感觉,这只是做同样事情的另一种方式
编辑:
我还尝试将fragment_activity设置为使用不同的样式,但它似乎也不起作用:
<style name="NoActionBar" parent="Widget.AppCompat.ActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
</style>
答案 0 :(得分:14)
好几个小时之后,我想我已找到解决方案,为所有内容保留片段,并仅删除启动活动的操作栏(适用于所有设备):
Android Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.app"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.company.app.LoginActivity"
android:theme="@style/NoActionBar"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
样式的定义如下:
<style name="NoActionBar" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
</style>
由于没有Theme.AppCompat.Light.NoActionBar,操作栏基本上被称为旧API中的标题栏,当我将该样式应用于活动本身时(我认为它是使用动态主题的唯一方式)它似乎根本不起作用。
所以希望这个简单的解决方案能够保留任何其他活动的操作栏,并且可能会对未来的某个人有所帮助:)。
答案 1 :(得分:11)
试试这个:
if(this instanceof LoginActivity) {
if (getActionBar().isShowing()) getActionBar().hide();
} else {
if (getActionBar().isShowing()) getActionBar().hide();
}
或强>
if(this instanceof LoginActivity){
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
} else {
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
}
答案 2 :(得分:3)
android:theme="@style/Theme.AppCompat.NoActionBar"
所以,我没有为NoActionBar重新定义样式,我只是从Theme.AppCompat中添加了它
答案 3 :(得分:2)
我在Activity.onCreate()
中使用此代码protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Hiding the title bar has to happen before the view is created
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// ...
}