W mojej aplikacji na Androida chcę, aby standardowy / podstawowy pasek tytułu zmienił kolor.
Aby zmienić kolor tekstu, czy setTitleColor(int color)
jest sposób na zmianę koloru tła paska?
W mojej aplikacji na Androida chcę, aby standardowy / podstawowy pasek tytułu zmienił kolor.
Aby zmienić kolor tekstu, czy setTitleColor(int color)
jest sposób na zmianę koloru tła paska?
Odpowiedzi:
Ten wątek pozwoli Ci rozpocząć tworzenie własnego paska tytułu w pliku xml i używanie go w swoich działaniach
Edytować
Oto krótkie podsumowanie zawartości powyższego linku - służy to tylko ustawieniu koloru tekstu i tła paska tytułu - bez zmiany rozmiaru, bez przycisków, tylko najprostsza próbka
res / layout / mytitle.xml - To jest widok, który będzie reprezentował pasek tytułu
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myTitle"
android:text="This is my new title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/titletextcolor"
/>
res / values / themes.xml - Chcemy zachować domyślny motyw Androida i wystarczy zmienić kolor tła tytułu. Dlatego tworzymy motyw, który dziedziczy motyw domyślny i ustawiamy styl tła na nasz własny styl.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="customTheme" parent="android:Theme">
<item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
</style>
</resources>
res / values / styles.xml - w tym miejscu ustawiamy motyw tak, aby używał żądanego koloru tła tytułu
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / colors.xml - Ustaw tutaj żądany kolor
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
W AndroidMANIFEST.xml ustaw atrybut motywu w aplikacji (dla całej aplikacji) lub w tagach działania (tylko to działanie)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
Z działania (o nazwie CustomTitleBar):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);
}
Dziękuję za to jasne wyjaśnienie, jednak chciałbym dodać trochę więcej do Twojej odpowiedzi, zadając pytanie z linkiem (nie chcę pisać nowego postu, ponieważ ten jest podstawą mojego pytania).
Deklaruję, że mój pasek tytułowy w superklasie, z której wszystkie moje zajęcia są dziećmi, musi zmienić kolor paska tylko raz. Chciałbym też dodać ikonę i zmienić tekst w pasku. Zrobiłem kilka testów i udało mi się zmienić jedno lub drugie, ale nie oba w tym samym czasie (używając setFeatureDrawable i setTitle). Idealnym rozwiązaniem byłoby oczywiście podążanie za wyjaśnieniem w wątku podanym w linku, ale jak deklaruję w nadklasie, mam problem z układem w setContentView i R.id.myCustomBar, ponieważ jeśli i dobrze pamiętam, mogę wywołać setContentView tylko raz ...
EDYTUJ Znaleziono moją odpowiedź:
Dla tych, którzy, tak jak ja, lubią pracować z nadklasami, ponieważ świetnie nadaje się do uzyskania menu dostępnego w każdym miejscu w aplikacji, tutaj działa tak samo.
Po prostu dodaj to do swojej superklasy:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.customtitlebar);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
customTitleText = (TextView) findViewById(R.id.customtitlebar);
(musisz zadeklarować textview jako chronioną zmienną klasową)
Siła tego polega na tym, że wszędzie w aplikacji (jeśli na przykład wszystkie Twoje zajęcia są dziećmi tej klasy), wystarczy zadzwonić
customTitleText.setText("Whatever you want in title");
a twój pasek tytułowy zostanie edytowany.
XML skojarzony w moim przypadku to (R.layout.customtitlebar):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
android:background="@color/background" android:padding="3px" />
</LinearLayout>
Istnieje inny sposób zmiany koloru tła, jednak jest to hack i może się nie powieść w przyszłych wersjach Androida, jeśli zmieni się hierarchia widoku okna i jego tytuł. Jednak kod się nie zawiesza, wystarczy pominąć ustawienie żądanego koloru, w takim przypadku.
W swojej aktywności, podobnie jak onCreate, wykonaj:
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
}
}
Ten kod pomaga programowo zmienić tło paska tytułu w systemie Android. Zmień kolor na dowolny.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
na powyższym kodzie możesz spróbować użyć tytułu zamiast paska tytułu , wpłynie to na całą aktywność w Twojej aplikacji
Chyba nie. Możesz tworzyć działania bez tytułów i tworzyć własne paski tytułu w układzie działań.
Sprawdź to , wiersz 63 i poniżej:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
ustawia widok niestandardowy zamiast domyślnego widoku tytułu.
Rzuć okiem platforms/android-2.1/data/res/layout/screen.xml
na SDK. Wydaje się, że definiuje tam tytuł. Możesz często sprawdzać takie układy i pożyczać
style="?android:attr/windowTitleStyle"
style, których możesz następnie używać i nadpisywać we własnych TextViews.
Możesz nawet wybrać tytuł do bezpośredniego dostosowania, wykonując:
TextView title = (TextView)findViewById(android.R.id.title);
Spróbuj z następującym kodem
View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
ViewParent parent = titleView.getParent();
if (parent != null && (parent instanceof View)) {
View parentView = (View)parent;
parentView.setBackgroundColor(Color.RED);
}
}
również użyj tego linku, jego bardzo przydatny: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
Istnieje łatwiejsza alternatywa zmiany koloru paska tytułu, korzystając z biblioteki obsługi zgodności aplikacji v7 dostarczonej przez Google.
Zobacz ten link, aby dowiedzieć się, jak skonfigurować tę bibliotekę pomocy: https://developer.android.com/tools/support-library/setup.html
Gdy to zrobisz, wystarczy dodać następujące wiersze do pliku res / values / styles.xml:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
(zakładając, że "titlebackgroundcolor" jest zdefiniowany w twoim res / values / colors.xml, np .:
<color name="titlebackgroundcolor">#0000AA</color>
)
Wydaje się, że od czasu Androida 5.0 (poziom interfejsu API 21) sytuacja się poprawiła / łatwiej.
Myślę, że szukasz czegoś takiego:
<style name="AppTheme" parent="AppBaseTheme">
<!-- Top-top notification/status bar color: -->
<!--<item name="colorPrimaryDark">#000000</item>-->
<!-- App bar color: -->
<item name="colorPrimary">#0000FF</item>
</style>
Zobacz tutaj w celach informacyjnych:
https://developer.android.com/training/material/theme.html#ColorPalette
Wklej ten kod po setContentView lub do onCreate
jeśli masz kod koloru, użyj tego;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
jeśli chcesz mieć określony kod z biblioteki Color, użyj tego;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));