6

我正在为应用程序创建框架并希望隐藏登录活动的操作栏。该应用程序将完全由片段组成,因为它们很棒。

我可以很好地隐藏我的活动的操作栏,但是每次我运行应用程序时,我都会看到我膨胀的空白片段和默认操作栏大约 2 秒钟,然后它才能成功膨胀登录片段。

关于我应该如何/在哪里隐藏操作栏(同时保留我的框架)以阻止这种情况发生的任何想法?

登录活动.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();
    }
}

}

登录片段.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>
4

4 回答 4

14

好的,几个小时后,我想我已经找到了解决方案,可以为所有内容保留片段并仅删除启动活动的操作栏(适用于所有设备):

安卓清单:

<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 中的标题栏,当我将该样式应用于活动本身时(我认为这是唯一的使用动态主题的方式)它似乎根本不起作用。

因此,希望这个简单的解决方案可以保留任何其他活动的操作栏,并且将来可能会对某人有所帮助:)

于 2013-11-22T14:38:46.757 回答
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();
}
于 2013-11-22T14:47:52.437 回答
3

丹尼尔威尔逊上面的评论确实有效,但与我的做法略有不同。我根本没有定义样式,我在 AndroidManifext.xml 中所做的只是将它添加到我的活动中:

android:theme="@style/Theme.AppCompat.NoActionBar"

所以,我不必为 NoActionBar 重新定义样式,我只是从 Theme.AppCompat 添加它

于 2015-01-04T20:50:13.733 回答
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);
    // ...
}
于 2014-10-15T15:20:18.063 回答