Button, der ein Menü öffnet?

  • 15 Antworten
  • Neuester Beitrag
Diskutiere Button, der ein Menü öffnet? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
N

no1Ltan

Fortgeschrittenes Mitglied
Hallo Leute,

ich möchte gerne folgendes realisieren:
Beim Klick auf einen Button soll ein Menü geöffnet werden, das aus vielen Buttons besteht.
Der 1. Button aktiviert ein Farbmenü, die Buttons innerhalb dieses Farbmenüs stellen die Farben dar.

Skizziert würde das so hier aussehen:


(Wie z.B. bei MS Paint, wenn man auf den Button "Palette bearbeiten" klickt.)

Meine erste Idee war es, zwei Layouts übereinander zu legen.
Der Button des 1. Layouts setzt die Sichtbarkeit des 2. Layouts auf sichtbar.
Beim Klick eines beliebigen Buttons (in der Farbauswahl) wird das 2. Layout wieder auf unsichtbar gestellt.

Meine Frage:
Ist die Grundidee gut oder gibt es vielleicht bessere Wege?
In der Palette (Layouts, Buttons etc.) gibt's ja so viel Auswahl, aber ich kenne gefühlt nur 5% der Elemente...

Danke für jede Hilfe!
 
J

jogimuc

Stammgast
Hi warum benutzt du nicht einen ColorpickerDialog?

https://www.google.de/url?sa=t&rct=...=7qXwgD45b4w&usg=AOvVaw1eO6kvfXeeiXgXc_Q05tyh

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=2ahUKEwjm6N27393cAhWDCewKHR8NDfYQwqsBMAR6BAgAEAo&url=https://www.youtube.com/watch?v=pXRbOt6p-OQ&usg=AOvVaw2jMOoZAzHJM39PcI9G1AXu


Die Grundidee mit den sichtbar und unsichtbar finde ich nicht so gut.
Entweder eine zweite Activity für die Farbauswahl mit rückgabe der Farbe über den Intent zur ersten Activity.
Oder du baust die Farbauswahl in einen Dialog den du mit dem Button startest.

Ps. ich habe gesehen das du die frage auch noch in einem zweiten Forum hast .
Meist ist das etwas Kontraproduktiv die Erfahrung zeigt das man da durcheinander kommt.
 
Zuletzt bearbeitet:
D

deek

Stammgast
Ich würde auch vorschlagen eine bestehende ColorPicker Library zu verwenden. Da gibt es sicherlich genug qualitativ gute Auswahl.

Wenn es dir darum geht sowas zu lernen und du es selbst machen willst stimm eich jogimuc zu. Das mit dem versteckten Layout ist nicht soo toll.
Entweder mit einem Dialog oder einem PopupWindow wäre das etwas schöner.
 
N

no1Ltan

Fortgeschrittenes Mitglied
Hallo und danke für eure Hilfe!

Ich habe Fortschritte gemacht.
In einer Activity habe ich Buttons erstellt, welche eine andere Activity öffnen und automatisch die Hintergrundfarbe ändern.
(Heißt also, dass ich das eigentliche Problem schon gelöst habe.)
Allerdings gibt's noch ein paar kleine Unklarheiten, die wir evt. gemeinsam lösen können.

In meiner MainActivity.java habe ich folgenden Code:

Code:
package com.example.USER.startanotheractivity;

import android.content.Intent;
import android.graphics.Color;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity
{
    public static final String EXTRA_MESSAGE = "com.example.USER.startanotheractivity";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void changeColorBrown(View view)
    {
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        int backgroundColor = R.color.brown;
        intentColor.putExtra("backgroundColor", backgroundColor);
        startActivity(intentColor);
    }
    public void changeColorBlue(View view)
    {
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        int backgroundColor = R.color.blue;
        intentColor.putExtra("backgroundColor", backgroundColor);
        startActivity(intentColor);
    }
    public void changeColorRed(View view)
    {
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        int backgroundColor = R.color.red;
        intentColor.putExtra("backgroundColor", backgroundColor);
        startActivity(intentColor);
    }
    public void switchActivity(View view)
    {
        Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
        startActivity(intent);
    }
}
In der activity_main.xml sieht es folgendermaßen aus:

Code:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/con_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.USER.startanotheractivity.MainActivity">

    <Button
        android:id="@+id/button_change_color_brown"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/button_change_color_brown"
        android:onClick="changeColorBrown"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="@string/button_change_color_brown" />

    <Button
        android:id="@+id/button_change_color_blue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:onClick="changeColorBlue"
        android:text="@string/button_change_color_blue"
        tools:text="@string/button_change_color_blue"
        app:layout_constraintBottom_toTopOf="@+id/button_change_color_brown"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button_change_color_red"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:onClick="changeColorRed"
        android:text="@string/button_change_color_red"
        app:layout_constraintBottom_toTopOf="@+id/button_change_color_brown"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_change_color_blue" />

    <Button
        android:id="@+id/button_start_activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="16dp"
        android:onClick="switchActivity"
        android:text="@string/button_start_activity"
        app:layout_constraintBottom_toTopOf="@+id/button_change_color_blue"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Die zweite Activity heißt DisplayMessageActivity.java und verfügt über folgenden Code:

Code:
package com.example.USER.startanotheractivity;

import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DisplayMessageActivity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        int backgroundColor = getIntent().getIntExtra("backgroundColor", 0);
        ConstraintLayout con_layout_second_activity = (ConstraintLayout) findViewById(R.id.con_layout_second_activity);
        con_layout_second_activity.setBackgroundResource(backgroundColor);       
    }
}
Unklarheiten, die ich aktuell habe:
1) Codes zusammenfassen
Aus AutoHotkey weiß ich, dass es sinnvoll ist, gleiche Programmcodezeilen zusammenzufassen.
Z.B. habe ich 3x diesen Programmblock in der MainActivity.java:

Code:
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        int backgroundColor = R.color.blue;
        intentColor.putExtra("backgroundColor", backgroundColor);
        startActivity(intentColor);
Der Unterschied ist nur der Farbwert - alles andere ist gleich.
In AutohotKey würde ich statt des Farbwerts eine Variable nehmen und beim Aufruf der Funktion die Variable definieren.
Hab leider keine Ahnung, ob oder wie das hier geht.

2) Text
Auch wenn es kein echtes Problem ist, wundert es mich, warum die Button-Beschriftungen alle in Großbuchstaben sind.
Statt Blue, Red, Brown und Start Activity steht:
BLUE, RED, BROWN und START ACTIVITY.

3) Speichern der Hintergrundfarbe
Sobald ich auf einen Farb-Button klicke, öffnet sich die zweite Activity und die Hintergrundfarbe wurde korrekt festgelegt.
Gehe ich zurück und klicke auf den Button Start Activity, ist die Hintergrundfarbe wieder weiß.
Warum?
Ich dachte, die bundles speichern den Zustand der Activity.
Achso und public static final String EXTRA_MESSAGE = "com.example.USER.startanotheractivity"; brauche ich evt. gar nicht mehr.

Danke nochmals für euren Support!

P.S. Werde jetzt vorerst nur noch in diesem Forum posten.
 
J

jogimuc

Stammgast
Hallo,

Frage 1
Dann schreibe eine Methode dafür.

public startIntent(int color){
Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
intentColor.putExtra("backgroundColor", color);
startActivity(intentColor);
}
Aufruf aus der onClick
startIntent(R.color.blue);

Frage 2
Kann in deinen Code die Zeilen nicht finden „BLUE, RED, BROWN und START ACTIVITY.“
Grossbuchstaben verwendet man üblicherweise für String Kostanten. Damit man gleich weis das es eine Konstante ist.

Frage 3
Du startest mit dem Intent eine zweite neue Activity dabei wird die alte Activity zerstört.
Beim Zurück zur ersten Activity wird sie wieder neu gestartet es wird auch wieder die onCreate aufgerufen. Und das Layout wieder neu aus dem XML geladen.

Beim zurück übergibst du aber kein Bundle und in der esten Activity fragst du auch keines ab und setzt die neuen Werte zB.mit setbackgroundcolor .

Ich würde die Farbwerte in SharedPreferences speichern und immer in der onCreate setzen.
Denn eigentlich willst du doch in deiner Zweiten Activity einen Farbwähler haben. Und den vom Farbwähler zurück gegebene wert speicherst du in der SharedPreferences.
Wenn du nun zurück zur ersten gehst wird sie neu gestartet und anschließend in der onCreate die Farben der Button überschrieben.
Beim Intent musst du aber auch den entsprechenden Key des SharedPreferences ,mit übergeben.



Ja den final String brauchst du so in deiner App nicht.
 
Zuletzt bearbeitet:
N

no1Ltan

Fortgeschrittenes Mitglied
Ok, super!
Also das mit den SharedPreferences und dem Intent hat geklappt - das sagt zumindest der Test.
An den xml-Dateien habe ich nichts verändert, daher werde ich sie auch nicht nochmal posten.

Den SwitchActivity-Button in der MainActivity habe ich nur testweise drin gelassen,
um zu sehen, ob die Farbe tatsächlich gespeichert wurde.
Ja, wurde sie.

MainActivity:
Code:
package com.example.USER.startanotheractivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity
{
    String colourSelected = "";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void setColor()
    {
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        SharedPreferences prefs = getSharedPreferences("bgColour", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString("colour", colourSelected);
        editor.commit();
        startActivity(intentColor);
    }
    public void changeColorBrown(View view)
    {
        colourSelected = "Brown";
        setColor();
    }
    public void changeColorBlue(View view)
    {
        colourSelected = "Blue";
        setColor();
    }
    public void changeColorRed(View view)
    {
        colourSelected = "Red";
        setColor();
    }
    public void switchActivity(View view)
    {
        Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
        startActivity(intent);
    }
}
DisplayMessageActivity:

Code:
package com.example.USER.startanotheractivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.preference.PreferenceManager;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DisplayMessageActivity extends AppCompatActivity
{
    String colour;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        SharedPreferences prefs = getSharedPreferences("bgColour", MODE_PRIVATE);
        colour = prefs.getString("colour", "WHITE");
        ConstraintLayout con_layout_second_activity = (ConstraintLayout) findViewById(R.id.con_layout_second_activity);
        if (colour == "Brown")
        {
            con_layout_second_activity.setBackgroundResource(R.color.brown);
        }
        if (colour == "Red")
        {
            con_layout_second_activity.setBackgroundResource(R.color.red);
        }
        if (colour == "Blue")
        {
            con_layout_second_activity.setBackgroundResource(R.color.blue);
        }
    }
}
Wenn euch irgendwas negatives auffällt, dürft ihr das sehr gerne erwähnen :)
Vielleicht kann man die If-Statements durch ein Array ersetzen und stattdessen die Elemente des Arrays durchsuchen.
(So hätte ich es zumindest bei AutoHotkey gemacht.)

Ach und bezüglich des Themes:
Das Problem ist, dass ich beim DefaultTheme nichts sehe - es ist alles weiß.
Buttons, Layouts, TextViews - alles nicht sichtbar.
Erst wenn ich das Theme ändere, z.B. in Light, sehe ich alles.
Vielleicht irgendein Bug.

Danke nochmals für eure Hilfe!
 
J

jogimuc

Stammgast
Hi ja so kann man das auch machen.
Nur dachte ich das du die Button in der Main nach dem Rücksprung von der Zweiten zu MainActivity einfärben wolltest.
Ich würde in SharedPreferences gleich den "int" Wert der Farbe oder der Resource speichern dann brauchst du keine if in der zweiten Activity.


Das mit den Pefernces hatte ich eigentlich so gedacht das du in der zweiten Activity eine Farbe bestimmst zB. mit dem Colorpicker und den in den Prefernces speicherst. Damit er beim nächsten start der App oder beim Rücksprung den Button färben kann.

So mach das ganze wenig Sinn.

Wenn es dir so gefällt ok.
So hätte ich es zumindest bei AutoHotkey gemacht.
Bitte höre auf in dieser Script Sprache zu denken. Benutze Übergabewerte in Methoden und mach nicht alle Variablen Gobal. Die du auch der Methode übergeben hättest können.
Das gibt es wohl in der Win Script Sprache nicht? Funktionen mit Parametern meine ich.

Zum Thema mit den Button wie sieht deine string.xml und style.xml aus?
 
Zuletzt bearbeitet:
swa00

swa00

Moderator
Teammitglied
jogimuc schrieb:
und mach nicht alle Variablen global.
... und vor allem gibt es keine globalen Variablen , wie in anderen Programiersprachen üblich.
Android kann Dir jederzeit diese Variablen und Werte klauen und sind somit nichtig. (z.b. GC)

Unter Android verwendet man dazu dann Singleton Klassen
 
J

jogimuc

Stammgast
Hallo @saw00 mit Global meinte ich nicht Global in der App oder dem Packet.
Sondern viel mehr den Klassen Rumpf von der Activity.
Können diese auch vom GC zerstört werden wenn die Activity läuft ? Ich denke nein. Nur wenn die Activity im Hintergrund oder Gestoppt ist .
Eine static sollte bis zu onDestroy erhalten bleiben. Kannst du mir das Bestätigen würde mich echt Interesieren.
 
Zuletzt bearbeitet:
swa00

swa00

Moderator
Teammitglied
Öhm , Jörg , das kam falsch rüber :
Das war ein zusätzlicher Hinweis an den TE , keine Kritik an Deinem EInsatz :)
 
N

no1Ltan

Fortgeschrittenes Mitglied
Hallo,

ursprünglich war das mit den Buttons und Activities ja anders gedacht, richtig.
Allerdings bin ich derzeit in der Experimentierphase.
Ich möchte so viel Erfahrung wie möglich sammeln.

Bin auch leider kein echter Programmierer.
Habe nur etwas Erfahrung mit lua (Logitech) und C++ (AutoHotkey).
Daher dachte ich, es würde mir helfen, in Skriptsprache zu denken.
Und ja, bei AutoHotkey kann man natürlich sowohl Werte als auch Variablen an Funktionen übergeben.
(Falls das deine Frage war.)
Ich glaube, dass Methoden (Java) nur ein anderer Begriff für Funktionen (lua, C++) sind.

Okay, back to topic:
Bezüglich des int-Wertes einer Farbe muss ich gleich mal fragen:
Handelt es sich hier um die Farbnummer aus der colors.xml?
Gehen wir mal davon aus, dass das hier meine Farbliste ist:

Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="white">#ffffff</color>
    <color name="yellow">#f7dc6f</color>
    <color name="orange">#e67e22</color>
    <color name="pink">#ff1493</color>
    <color name="red">#e74c3c</color>
    <color name="violet">#5b2c6f</color>
    <color name="green">#2ecc71</color>
    <color name="blue">   #1b4f72</color>
    <color name="silver">#b3b6b7</color>
    <color name="brown">#784212   </color>
    <color name="black">#000000   </color>
</resources>
Heißt das, white = int 1, yellow = int 2 etc.?

Habe die Codes der MainActivity.java und DisplayMessageActivity.java überarbeitet.
In der MainActivity.java gibt's jetzt keine globalen Variablen mehr.
Außerdem übergebe ich keinen String mehr an den Intent, sondern einen int-Wert.
In der DisplayMessageActivity.java arbeite ich auch nicht mehr mit setBackgroundRessorce, sondern mit setBackgroundColor.
(Ressource scheint int-Werte nicht zu mögen)

MainActivity.java
Code:
package com.example.USER.startanotheractivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void setColor(int colorNumber)
    {
        Intent intentColor = new Intent(MainActivity.this, DisplayMessageActivity.class);
        SharedPreferences prefs = getSharedPreferences("bgColor", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putInt("color", colorNumber);
        editor.commit();
        startActivity(intentColor);
    }
    public void changeColorBrown(View view)
    {
        int colorNumber = 10;
        setColor(colorNumber);
    }
    public void changeColorBlue(View view)
    {
        int colorNumber = 8;
        setColor(colorNumber);
    }
    public void changeColorRed(View view)
    {
        int colorNumber = 5;
        setColor(colorNumber);
    }
    public void switchActivity(View view)
    {
        Intent intent = new Intent(MainActivity.this, DisplayMessageActivity.class);
        startActivity(intent);
    }
}
DisplayMessageActivity.java:

Code:
package com.example.USER.startanotheractivity;
import android.content.SharedPreferences;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class DisplayMessageActivity extends AppCompatActivity
{
    int colorNumber;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);
        SharedPreferences prefs = getSharedPreferences("bgColor", MODE_PRIVATE);
        colorNumber = prefs.getInt("color", colorNumber);
        ConstraintLayout con_layout_second_activity = (ConstraintLayout) findViewById(R.id.con_layout_second_activity);
        con_layout_second_activity.setBackgroundColor(colorNumber);
    }
}
Es funktioniert übrigens NICHT.
Vorher ging es, aber ich wollte ja gern die überflüssigen if-Statements loswerden.
(Weniger ist mehr.)

Bezüglich des Problems mit den Themen:
An der styles.xml habe ich nie was gemacht:

Code:
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>
Grüße
 
J

jogimuc

Stammgast
Hallo
Heißt das, white = int 1, yellow = int 2 etc.?
Nein das heißt es nicht. Das ist kein Array. Das sind Key / Wertpaare. Ressourcen werden immer in Key Wertpaaren gespeichert Über den Key kannst du die Ressource ansprechen.

(Ressource scheint int-Werte nicht zu mögen)
Stimmt nicht ganz Ressourcen sind genaugenommen nur „int“ Werte. Deshalb kannst du sie auch in einer „Int“ Variablen Speicher musst ihn dir aber erst holen.
Zb. int color = getResources().getColor(R.color.red);


public void changeColorBrown(View view)
{
int colorNumber = 10;
setColor(colorNumber);
}
Kann leider nicht gehen denn 10 ist kein Farbwert.
Farben sind auch int Werte 16Bit bestehend aus ARGB , A ist der alpha Kanal, R rot , G grün , B blau. Jeder Kanal 8 Bit breit.


Code:
public void changeColorBrown(View view)
    {
         setColor(getResources().getColor(R.color.brown);
    }
-- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
Zum Thema mit den Button

mich hätte eigentlich mehr deine String.xml Interessiert.
Was da zb. für die Ressource „button_change_color_brown“ steht.

Denn in deinem Layout benutzt du für den Text eine Ressourse .
android:text="@string/button_change_color_brown"

und nicht Hard-Codeten Text
android:text="Braun“

Wenn in dieser Ressource keine Groß Buchstaben sind liegt es amTheme wie @Optimist schon sagte.

Welches Theme hast du im manifest eingestellt?



Ach und bezüglich des Themes:
Das Problem ist, dass ich beim DefaultTheme nichts sehe - es ist alles weiß.
Buttons, Layouts, TextViews - alles nicht sichtbar.
Erst wenn ich das Theme ändere, z.B. in Light, sehe ich alles.
Vielleicht irgendein Bug.

Nein denke ich nicht, glaube eher du hast die Farben aus der colors.xml gelöscht.

Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>
Für das AppTheme werden genau diese Farben benutzt siehe styles.xml und die hast du gelöscht.
 
Zuletzt bearbeitet:
J

jogimuc

Stammgast
Lua kenne ich auch ist sehr c ähnlich. Habe das für Canon Kameras verwendet.

Aber mit AutoHotkey kann ich mich nicht anfreunden . Ist dem Basic ähnlich aber da gefällt mir visualbasic doch bessen.
 
Zuletzt bearbeitet:
N

no1Ltan

Fortgeschrittenes Mitglied
Hallo,

die Variante mit

Code:
    public void changeColorBrown(View view)
    {
        setColor(getResources().getColor(R.color.brown));
    }
klappt super!

Laut des Editors brauche ich das getColor nicht mal (es ist durchgestrichen).
Liegt anscheinend daran, dass ich API23 gewählt habe.
Die Alternative habe aber nicht hinbekommen, daher lasse ich es erstmal so.

Die AndroidManifest.xml ist die hier:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.USER.startanotheractivity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity">
            <!-- The meta-data tag is required if you support API level 15 and lower -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
    </application>

</manifest>
In der colors.xml habe ich die colorPrimary, colorPrimaryDark und colorAccent nicht gelöscht.
Ich hatte sie im letzten Beitrag nicht drin, da ich das dort nur als Beispiel nahm.

Jetzt gerade sieht mein Design so hier aus:


Wenn ich darauf hin dann das Theme wechsele, z.B. das hier:


Sieht alles einwandfrei aus:


Grüße
 
J

jogimuc

Stammgast
Hallo das mit der Ansicht im Designer denke ich liegt an dem bekanten Problem mit API 28.
Da hat Android Probleme kann sein das es in der neusten Version behoben ist.
Denn du hast im ersten Bild oben rechts auch ein rotes Icon was auf Renderfehler Hinweist
Deshalb entwickle ich nicht auf API 28 sondern API 27

Wo hast du denn deine Vermutlichen Api 23 eingestellt?
Denke du meinst die minSDK Version.
Übrigens die API Version wird im Gradle File eingestellt.


Ich empfehle dir im Sdk Manager api 28 zu löschen und 27 zu Installieren.
Wenn du nun ein neues Projekt erstellst wir es für Api 27 und nicht Api 28 erstellt.
Alles was du im Designer einstellst wirkt sich nur auf die Anzeige aus damit kannst du prüfen wie es auf einen Entsprechenden Gerät aus sehen würde .

Wird denn das Theme „Ligth“ auch entweder im Layout (dazu schaue dir das Layout im XML an) oder im Manifest auch gespeichert? Wenn nicht ist das nur eine Anzeige wie es unter diesem Theme aussehen würde .
Dein AppTheme laut styles.xml ist "Theme.AppCompat.Light.DarkActionBar"
Im manifest wird das AppTheme benutz und nach dem Build ist es ja auch ok.

Der Fehler von Android Studio ist im Designer das xml ist richtig.



Laut des Editors brauche ich das getColor nicht mal (es ist durchgestrichen)
Heißt nicht , das du das nicht brauchst sondern das die Methode deprecated ist.
 
Zuletzt bearbeitet: