mam dwa rodzaje działalności:Translucent motyw nie działa, gdy ustawiony programowo na Android 2.3.3 lub 4.2
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view) {
Intent intent= new Intent(this, TranslucentActivity.class);
startActivity(intent);
}
}
public class TranslucentActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
this.setTheme(android.R.style.Theme_Translucent);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_translucent);
}
}
Układ activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:onClick="click" />
</RelativeLayout>
Układ activity_translucent
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TranslucentActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Hello_world" />
</RelativeLayout>
Oczywisty
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.translucencytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.translucencytest.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.translucencytest.TranslucentActivity">
</activity>
</application>
</manifest>
Po kliknięciu przycisku w MainActivity zaczyna się TranslucentActivity z przezroczystym tłem. Wszystko wygląda dobrze w emulatorze Android na platformie 4.0.3 Ale na innych platformach, np. 2.3.3 lub 4.2, dostaję czarne tło zamiast przezroczystego. Co może być nie tak?
P.S. Nie chcę używać manifestu do deklarowania tematu działań.
Właśnie przetestowałem motyw i działa zgodnie z wersjami systemu Android. Istnieje kilka rzeczy, które mogą być nie tak z twoim przykładem. Półprzezroczysty motyw pokaże okno z tyłu, więc jeśli to okno jest czarne, to nie zobaczysz przezroczystości. Jeśli nie zadeklarujesz motywu dla swojej aplikacji, nie będzie on przezroczysty, ponieważ Android użyje domyślnego motywu przed wywołaniem setTheme, a wtedy zobaczysz domyślny motyw zamiast ekranu głównego. Aby móc Ci pomóc, powinieneś przynajmniej zamieścić dwa zastosowania układu w przykładzie i manifeście –
@EmanuelMoecklin Dodałem układy i manifest do mojego postu. Podejrzewam, że zamiast półprzezroczystości wyświetlany jest domyślny motyw, ale dlaczego działa on w wersji 4.0.3 i nie działa w wersjach 2.3.3 i 4.2? – Wytas
Używasz własnego @ stylu/AppTheme, więc musisz to opublikować, aby móc przetestować twój przykład. Różne wersje Androida używają różnych motywów, stylów i zasobów dla tych samych elementów ekranu (widoków). Producent ma także za temat swoich urządzeń, aby odróżnić je od konkurencyjnych urządzeń. Chociaż np. domyślne tło na jednym urządzeniu może być czarne, ale może być lekko przezroczyste, a gradient na innym urządzeniu. Nie możesz naprawdę polegać na "rzeczach", aby wyglądać tak samo na każdym urządzeniu, chyba że sam je tematujesz. –