it-swarm.com.ru

Скрыть панель действий во фрагменте

Я создаю основу для приложения и хочу скрыть панель действий для входа в систему. Приложение будет полностью состоять из фрагментов, потому что они потрясающие.

Я могу скрыть панель действий для своей деятельности, но каждый раз, когда я запускаю приложение, я вижу свой раздутый пустой фрагмент и панель действий по умолчанию в течение примерно 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);

Но у меня есть ощущение, что это просто другой способ сделать то же самое

Правка:

Я также попытался установить для frag_activity другой стиль, но он тоже не работает:

    <style name="NoActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowActionBar">false</item>
</style>
6
Daniel Wilson

Хорошо, через несколько часов, я думаю, я нашел решение сохранить фрагменты для всего и удалить панель действий (для всех устройств) только для запуска:

Манифест Android:

<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, и когда я применил этот стиль к самому действию (которое я считал единственным способ использования динамических тем), кажется, не работает вообще.

Надеюсь, это простое решение сохранит панель действий для любых других действий и может помочь кому-то в будущем :)

14
Daniel Wilson

попробуй это:

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();
}
11
The Badak

Приведенный выше комментарий Даниэля Уилсона работает, но незначительная разница в том, как я это сделал. Я вообще не определял стиль, все, что я делал в AndroidManifext.xml, это то, что я добавил это в свою деятельность:

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

Итак, мне не нужно было переопределять стиль для NoActionBar, я просто добавил его из Theme.AppCompat

3
pixel

Я использую этот код в 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);
    // ...
}
2
Girts Strazdins