textappearance - themes android studio




Você precisa usar um tema Theme.AppCompat(ou descendente) com esta atividade (20)

Android Studio 0.4.5

Documentação do Android para criar caixas de diálogo personalizadas: http://developer.android.com/guide/topics/ui/dialogs.html

Se você quiser um diálogo personalizado, poderá exibir uma Atividade como um diálogo, em vez de usar as APIs de diálogo. Basta criar uma atividade e definir seu tema para Theme.Holo.Dialog no elemento <activity> manifest:

<activity android:theme="@android:style/Theme.Holo.Dialog" >

No entanto, quando tentei isso, recebi a seguinte exceção:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

Eu estou apoiando o seguinte, e não posso usar algo maior que 10 para o min:

minSdkVersion 10
targetSdkVersion 19

Nos meus estilos eu tenho o seguinte:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

E no meu manifesto eu tenho isso para a atividade:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

Criando a caixa de diálogo como esta era algo que eu estava pulando para fazer, como eu já completei o layout.

Alguém pode me dizer como eu posso contornar este problema?


Alterar seu pai de estilo de tema para

 parent="Theme.AppCompat"

Isso funcionou para mim ...


Altere o tema da atividade desejada. Isso funciona para mim:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

Copiando a resposta do @MarkKeen nos comentários acima, pois tive o mesmo problema.

Eu tive o erro indicado no topo do post e aconteceu depois que eu adicionei um diálogo de alerta. Eu tenho todas as informações de estilo relevantes no manifesto. Meu problema foi resolvido alterando uma referência de contexto no construtor de alertas - alterei:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

para:

new android.support.v7.app.AlertDialog.Builder(this)

E sem mais problemas.


Em minhas experiências, o problema foi o contexto em que mostrei meu diálogo. Dentro de um botão, eu instancio um AlertDialog da seguinte maneira:

builder = new AlertDialog.Builder(getApplicationContext());

Mas o contexto não estava correto e causou o erro. Eu mudei usando o contexto da aplicação desta maneira:

Na seção declarar:

Context mContext;

no método onCreate

mContext = this;

E finalmente no código onde eu preciso do AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

Esta é a solução para mim.


Este trabalhou para mim:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>

Eu estava com esse problema mesmo que meu tema fosse um tema AppCompat e minha atividade fosse uma AppCompatActivity (ou Activity , como sugerido nas respostas de outras pessoas). Então eu limpei, reconstruí e executei novamente o projeto.

( Construir -> Limpar Projeto; Construir -> Reconstruir Projeto; Executar -> Executar )

Pode parecer idiota, mas agora funciona muito bem !

Só espero que ajude!


Eu tive essa queda em dispositivos Samsung , embora a atividade fez uso Theme.AppCompat . A causa raiz estava relacionada a otimizações estranhas no lado da Samsung:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

Minha solução foi apenas remover android:launchMode="singleTask"


Eu tive esse problema também e o que eu fiz para consertá-lo, e ainda usar o tema Holo, foi dar os seguintes passos:

primeiro substituí esta importação:

import android.support.v7.app.AppCompatActivity;

com este:

import android.app.Activity;

então mudei meu ramal de:

public class MyClass extends AppCompatActivity {//...

para isso:

public class MyClass extends Activity {//...

E também tive que mudar essa importação:

import android.support.v7.app.AlertDialog;

para esta importação:

import android.app.AlertDialog;

e você pode usar sua tag de tema no manifesto no nível de atividade:

android:theme="@android:style/Theme.Holo.Dialog" />

e por último, (a menos que você tenha outras classes em seu projeto que tenham que usar o appCompat da v7), você pode limpar e reconstruir o seu projeto ou excluir essa entrada no arquivo de compilação do gradiente no nível do aplicativo:

compile 'com.android.support:appcompat-v7:23.2.1'

Se você tiver outras classes em seu projeto que precisam usar o appCompat da v7, limpe e reconstrua o projeto.


Eu tive uma atividade com o tema <android:theme="@android:style/Theme.Dialog"> usado para mostrar o diálogo no meu appWidget e eu tive o mesmo problema

Eu resolvi esse erro alterando o código de atividade como abaixo:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}

Isso foi o que consertou para mim: em vez de especificar o tema no manifesto, eu o defini em onCreate para cada atividade que estende ActionBarActivity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Aqui MyAppTheme é um descendente de Theme.AppCompat e é definido em xml. Observe que o tema deve ser definido antes de super.onCreate e setContentView .


Isto é quando você quer um AlertDialog em um fragmento

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();

No manifesto do Android, basta alterar o tema da atividade para AppTheme como segue o snippet de código

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>


O motivo pelo qual você está tendo este problema é porque a atividade na qual você está tentando aplicar o tema da caixa de diálogo está estendendo o ActionBarActivity que requer que o tema AppCompat seja aplicado.

Atualização : estender AppCompatActivity também teria esse problema

Nesse caso, altere a herança Java de ActionBarActivity para Activity e deixe o tema da caixa de diálogo no manifesto como está, um valor não Theme.AppCompat

A regra geral é que, se você quiser que seu código suporte versões mais antigas do Android, ele deverá ter o tema AppCompat e o código java deverá estender AppCompatActivity . Se você tiver * uma atividade que não precisa desse suporte, como se você se importa apenas com as versões e os recursos mais recentes do Android, você pode aplicar qualquer tema a ela, mas o código java deve estender a Activity antiga simples.

NOTA: Quando a mudança de AppCompatActivity (ou uma subclasse, ActionBarActivity ), para Activity , também deve alterar as várias chamadas com "support" para a chamada correspondente sem "support". Portanto, em vez de getSupportFragmentManager , chame getFragmentManager .


Se você precisa estender o ActionBarActivity, você precisa do seu style.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

Se você definir como tema principal do seu aplicativo como android: Theme.Material.Light, em vez de AppTheme.Base , você receberá uma “IllegalStateException: Você precisa usar um erro Theme.AppCompat (ou descendente) com esta atividade”.


Solução rápida.

Altere seu pai do tema base em styles.xml

Substituir de

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

para

<style name="AppTheme" parent="Theme.AppCompat">

Tudo o que você precisa fazer é adicionar android:theme="@style/Theme.AppCompat.Light" à sua tag de aplicativo no arquivo AndroidManifest.xml .


Você chegou até aqui porque deseja aplicar o Material Design em seu estilo de tema nas versões anteriores do SDK para 21. ActionBarActivity requer o AppTheme portanto, se você também quiser evitar sua própria personalização sobre o AppTheme, só precisará alterar seus styles.xml (anterior ao SDK 21), assim, pode herdar um tema do App Compat.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

por esta:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

min sdk é 10. ActionBar está disponível a partir do nível de API 11. Então, para 10, você usaria AppCompat da biblioteca de suporte para a qual você precisa usar Theme.AppCompat ou descendente do mesmo.

Usar

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

Ou se você não quer barra de ação no topo

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

Mais informações @

http://developer.android.com/guide/topics/ui/actionbar.html

Editar:

Eu poderia ter lido mal o post.

Parece op quer um diálogo com um tema de atividade. Então, como já sugerido por Bobbake4, estenda Activity vez de ActionBarActivity .

Também dê uma olhada @ Atributos de Diálogo no link abaixo

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


para mim foi solução para usar ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

de Android - Como criar o FAB programaticamente?





android-studio