Я использую Android Sherlock в одном проекте, где я показываю VideoView. Когда ориентация экрана является портретной, отображается видео и текст. Когда отображается пейзаж, отображается только видео в полноэкранном режиме.
Ну, я сомневаюсь: почему альфа-цвет (панели действий Шерлока) показан, когда ориентация - портрет, но изменяет его альфа-свойство (становится непрозрачным), когда ориентация является ландшафтной?
Мой onCreate() показан ниже:
public void onCreate(Bundle savedInstanceState) {
// Makes action bar become translucent, and sets layout of this activity.
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
}
Ну, я использую requestWindowFeature (Window.FEATURE_ACTION_BAR_OVERLAY), который позволяет альфа-цвет в панели действий.
Когда меняется ориентация, я вызываю onConfigurationChanged(), который вызывает setScreenLayout(). Этот метод устанавливает размер видео и изменяет цвет фона панели действий.
/**
* Sets the screen layout, according with the current orientation.
*
* @param isInLandscapeMode
*/
public void setScreenLayout(Boolean isInLandscapeMode) {
// If orientation is landscape.
if (isInLandscapeMode) {
// Hides text of the layout.
mTextScrollView.setVisibility(View.GONE);
// Set the size of the video.
setVideoDimensions((int)Math.floor(mWindowWidth * (1 / WIDESCREEN_RATIO)), mWindowWidth);
// Sets window to full screen.
setWindowToFullScreen();
// Sets action bar background color.
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.bg_translucent_black));
}
// If orientation is portrait.
else {
// Shows text of the layout.
mTextScrollView.setVisibility(View.VISIBLE);
// Set the size of the video.
setVideoDimensions(mWindowWidth, (int)Math.floor(mWindowWidth * WIDESCREEN_RATIO));
// Sets window to normal screen.
setWindowToNormalScreen();
// Sets action bar background color.
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.bg_translucent_black));
}
}
Этот цвет установлен в res/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="bg_translucent_black">#11EEEEEE</color>
</resources>
В моем AndroidManifest.xml я установил VideoActivity с свойством android: configChanges = "orientation", что позволяет продолжить воспроизведение видео, если ориентация изменилась.
<!-- Video Activity -->
<activity
android:name=".VideoActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:configChanges="orientation"
/>
Поэтому, когда ориентация изменяется, onCreate() не является вызовом.
Я думаю, что происходит то, что requestWindowFeature (Window.FEATURE_ACTION_BAR_OVERLAY) позволяет альфу только в первой ориентации при создании активности (в данном случае, в портрете). Таким образом, ландшафтная ориентация не стала альфа-цветом. Но я не уверен.
Я уверен, что мне нужен альфа-цвет панели действий в обеих ориентациях.
Кто-нибудь знает, возможно ли, чтобы мое видео имело альфа-цвет в обеих ориентациях?
Я считаю, что ActionBarSherlock нуждается в Android для обработки изменений конфигурации, а не для вашего приложения. Использование андроида: configChanges "взломать" и ActionBarSherlock вместе в одном приложении невозможно.