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 uma caixa de diálogo personalizada, poderá exibir uma Atividade como uma caixa de diálogo em vez de usar as APIs da caixa de diálogo. Simplesmente crie uma atividade e defina seu tema como Theme.Holo.Dialog no <activity>
elemento manifesto:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
No entanto, quando tentei isso, recebo a seguinte exceção:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Estou apoiando o seguinte e não posso usar algo maior que 10 para o mínimo:
minSdkVersion 10
targetSdkVersion 19
Nos meus estilos, 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>
Criar a caixa de diálogo assim era algo que eu esperava fazer, pois já concluí o layout.
Alguém pode me dizer como posso resolver esse problema?
fonte
AppCompat
qual é a biblioteca de suporte para oferecer suporte às barras de ação abaixo do nível 11. da API. Basta usarandroid:theme="@style/AppTheme" >
para a atividade em manifestoAndroidManifest.xml
, o tema que você está especificando para a sua atividade está substituindo o tema que você está especificando para o seu aplicativo. Remova aandroid:theme
linha da<activity>
etiqueta.Respostas:
O motivo pelo qual você está tendo esse problema é porque a atividade na qual você está tentando aplicar o tema da caixa de diálogo está se estendendo
ActionBarActivity
que requer que oAppCompat
tema seja aplicado.Atualizar : a extensão
AppCompatActivity
também teria esse problemaNesse caso, altere a herança Java de
ActionBarActivity
paraActivity
e deixe o tema do diálogo no manifesto como ele é, um nãoTheme.AppCompat
valorA regra geral é que, se você deseja que seu código ofereça suporte a versões mais antigas do Android, ele deve ter o
AppCompat
tema e o código java deve se estenderAppCompatActivity
. Se você possui * uma atividade que não precisa desse suporte, como você se preocupa apenas com as versões e os recursos mais recentes do Android, você pode aplicar qualquer tema a ele, mas o código java deve ser antigoActivity
.NOTA: Quando mudar de
AppCompatActivity
(ou de uma subclasseActionBarActivity
) para paraActivity
, também deve alterar as várias chamadas com "suporte" para a chamada correspondente sem "suporte". Então, em vez degetSupportFragmentManager
ligargetFragmentManager
.fonte
ActionBarActivity
que é mostrado nas declarações de importação do comentário abaixo do questionário.Tudo o que você precisa fazer é adicionar
android:theme="@style/Theme.AppCompat.Light"
à sua tag do aplicativo noAndroidManifest.xml
arquivo.fonte
Copiando a resposta do @MarkKeen nos comentários acima, pois tive o mesmo problema.
Tive o erro indicado na parte superior da postagem e ocorreu depois que adicionei uma caixa de 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 - eu mudei:
para:
E sem mais problemas.
fonte
getActivity()
vez dethis
como sugerido acima e o problema foi corrigido. Quanto ao motivo, só posso supor que o código AlertDialog.Builder (xxx) mais antigo queria um tipo diferente, ou era simplesmente menos exigente com o que foi passado, enquanto o atual Builder () realmente quer uma Atividade. Como o Google optou por ocultar (remover?) A documentação do código antigo, presumivelmente em um esforço para incentivar o uso da versão v7.app, não sei como ter certeza.getContext()
vez dethis
se estiver dentro de uma classe de adaptador ArrayAdapter ou similar.min sdk é 10.
ActionBar
está disponível no nível 11. da API. Portanto, para 10 você usariaAppCompat
partir da biblioteca de suporte da qual precisa usarTheme.AppCompat
ou descender da mesma.Usar
Ou se você não quer barra de ação no topo
Mais informações @
http://developer.android.com/guide/topics/ui/actionbar.html
Editar:
Eu posso ter lido mal o op post.
Parece que o op quer um diálogo com um tema de atividade. Então, como já sugerido por Bobbake4, estenda em
Activity
vez deActionBarActivity
.Veja também @ 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/
fonte
Se você estiver usando o contexto do aplicativo, assim:
altere-o para um contexto de atividade como este:
fonte
Eu estava enfrentando esse problema, mesmo que meu tema fosse um
AppCompat
tema e minha atividade fosse umAppCompatActivity
(ouActivity
, conforme sugerido nas respostas de outras pessoas). Então, eu limpei, reconstruí e execute novamente o projeto.( Compilar -> Limpar Projeto; Compilar -> Reconstruir Projeto; Executar -> Executar )
Pode parecer idiota, mas agora funciona muito bem !
Só espero que ajude!
fonte
Foi isso que o corrigiu: em vez de especificar o tema em manifesto, eu o defini
onCreate
para cada atividade que se estendeActionBarActivity
:Aqui
MyAppTheme
está um descendente deTheme.AppCompat
e é definido em xml. Observe que o tema deve ser definido antessuper.onCreate
esetContentView
.fonte
vá para seus estilos e coloque os pais
ao invés de
fonte
No meu caso, não tenho nenhum arquivo values-v21 no meu diretório res. Então eu criei e adicionei os seguintes códigos:
fonte
Mude o tema da atividade desejada. Isso funciona para mim:
fonte
Eu tive essa falha em dispositivos Samsung , embora a atividade tenha usado Theme.AppCompat . A causa raiz estava relacionada a otimizações estranhas no lado da Samsung:
Minha solução foi apenas remover
android:launchMode="singleTask"
fonte
Se você precisar estender o ActionBarActivity, precisará do seu style.xml:
Se você definir como tema principal do seu aplicativo como android: Theme.Material.Light em vez de AppTheme.Base , você receberá um erro "IllegalStateException: você precisa usar um tema Theme.AppCompat (ou descendente) com esta atividade").
fonte
Apenas faça
Ao invés de
fonte
this
esperado.Eu tive o mesmo problema, mas ele resolveu quando o coloquei no manifesto: android: theme = "@ style / Theme.AppCompat.
fonte
No meu caso, esse problema apareceu quando tentei mostrar a caixa de diálogo. O problema estava no contexto, eu uso getBaseContext () que teoricamente deve retornar o contexto Activity, mas parece que não, ou retorna o contexto antes de qualquer Theme ser aplicado.
Então, substituí getBaseContexts () por " this " e agora funciona como o esperado.
fonte
Eu tive uma atividade com tema
<android:theme="@android:style/Theme.Dialog">
usada para mostrar a caixa de diálogo no meu appWidget e tive o mesmo problemaEu resolvi esse erro alterando o código de atividade como abaixo:
fonte
para mim foi a solução para usar ContextThemeWrapper:
do Android - Como criar FAB programaticamente?
fonte
Verifique se você está usando um contexto de atividade ao criar um novo diálogo de alerta e não um aplicativo ou contexto base.
fonte
Eu também tive esse problema e o que fiz para corrigi-lo, E ainda usar o tema Holo, foi seguir estas etapas:
primeiro substituí esta importação:
com este:
alterei minha extensão de:
para isso:
E também teve que mudar essa importação:
para esta importação:
e você pode usar sua tag de tema no manifesto no nível da atividade:
e, por último, (a menos que você tenha outras classes em seu projeto que precisam usar a v7 appCompat), você pode limpar e reconstruir seu projeto ou excluir essa entrada no arquivo gradle build no nível do aplicativo:
se você tiver outras classes em seu projeto que precisam usar a v7 appCompat, basta limpar e reconstruir o projeto.
fonte
Você chegou a esse ponto porque deseja aplicar o Material Design em seu estilo de tema nas versões anteriores do sdk para 21.
ActionBarActivity
RequerAppTheme
isso, se você também deseja impedir sua própria personalização do AppTheme, é necessário alterar o seu styles.xml (anterior para o sdk 21) para que, dessa maneira, possa herdar um tema de compatibilidade de aplicativos.por esta:
fonte
Mude o pai do estilo do tema para
Isso funcionou para mim ...
fonte
Você tem muitas soluções para esse erro.
Você deve usar Activity ou FragmentActivity em vez de ActionbarActivity ou AppCompatActivity
Se você deseja usar o ActionbarActivity ou AppCompatActivity , altere styles.xml Theme.Holo.xxxx para Theme.AppCompat.Light (se necessário, adicione DarkActionbar )
Se você não precisa de atributos avançados sobre a barra de ação ou o AppCompat , não precisa usar o Actionbar ou o AppCompat .
fonte
No manifesto do Android, basta alterar o tema da atividade para AppTheme da seguinte forma: snippet de código
fonte
É quando você deseja um AlertDialog em um fragmento
fonte
Nas minhas experiências, o problema foi o contexto em que mostrei meu diálogo. Dentro de um botão, clique em Eu instanciar um AlertDialog desta maneira:
Mas o contexto não estava correto e causou o erro. Eu mudei usando o contexto do aplicativo desta maneira:
Na seção declarar:
no método onCreate
E, finalmente, no código em que eu preciso do AlertDialog:
Esta é a solução para mim.
fonte
Este funcionou para mim:
fonte
Sua Atividade está estendendo o ActionBarActivity, que requer que o AppCompat.theme seja aplicado. Mude de ActionBarActivity para Activity ou FragmentActivity , resolverá o problema.
fonte
Eu estava tendo o mesmo problema. Porque eu estava criando uma gaveta de navegação personalizada. Mas eu esqueço de mencionar o tema no meu manifesto assim
Assim que adicionei o tema acima ao meu manifesto, ele resolveu o problema.
fonte
Solução rápida.
Altere seu pai do tema base em styles.xml
Substituir de
para
fonte
Esta solução funcionou para mim.
A biblioteca de design depende das bibliotecas de suporte do Support v4 e do AppCompat, portanto, não use versões diferentes para appcompat e biblioteca de design em gradle.
usar
ao invés de
fonte