6

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

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

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> 

ответ

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

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

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(); 
} 
+0

Спасибо, чувак, но я думаю, что решил его с помощью моего другого ответа, если вы заметили, что это то, что я использовал изначально, но контейнер базового фрагмента был выброшен на экран в методе super.onCreate() сначала для пару секунд –

+0

hmmmmmm ........ –

1

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

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

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

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

+0

Да, я считаю, что это относительно новое дополнение к библиотеке совместимости приложений, чем когда этот вопрос был впервые отправлен, хотя я мог ошибаться! Кажется, это хорошее решение, хотя –

 Смежные вопросы

  • Нет связанных вопросов^_^