Estou tentando implementar uma barra de título personalizada:
Aqui está a minha classe Helper:
import android.app.Activity;
import android.view.Window;
public class UIHelper {
public static void setupTitleBar(Activity c) {
final boolean customTitleSupported = c.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
c.setContentView(R.layout.main);
if (customTitleSupported) {
c.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
}
}
Aqui é onde eu chamo onCreate ():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupUI();
}
private void setupUI(){
setContentView(R.layout.main);
UIHelper.setupTitleBar(this);
}
Mas eu recebo o erro:
requestFeature() must be called before adding content
android
android-layout
android-activity
Sheehan Alam
fonte
fonte
Respostas:
Bem, faça o que a mensagem de erro diz.
Não ligue
setContentView()
antesrequestFeature()
.Nota:
Como dito nos comentários, para ambos
ActionBarSherlock
e para aAppCompat
biblioteca, é necessário ligarrequestFeature()
antessuper.onCreate()
fonte
requestFeature()
antessuper.onCreate()
. Referência: github.com/JakeWharton/ActionBarSherlock/issues/…requestWindowFeature(Window.FEATURE_NO_TITLE)
-lo para ocultá-lo e, em seguida,setContentView()
para o seu primeiro layout erequestWindowFeature(Window.FEATURE_CUSTOM_TITLE)
para mostrar a barra de título novamente. Isso seria depoissetContentView()
da segunda vez.requestFeature
antessuper.onCreate()
Sei que tem mais de um ano, mas ligar
requestFeature()
nunca resolveu meu problema. Na verdade, eu não chamo nada disso.Foi um problema inflacionar a visão que suponho. Apesar de toda a minha pesquisa, nunca encontrei uma solução adequada até brincar com os diferentes métodos de inflar uma exibição.
AlertDialog.Builder é a solução fácil, mas requer muito trabalho se você usar o
onPrepareDialog()
para atualizar essa exibição.Outra alternativa é aproveitar o AsyncTask para diálogos.
Uma solução final que usei está abaixo:
* Algumas notas adicionais:
fonte
content = inflater.inflate(R.layout.custom_view, null);
provavelmente deveria sercontent = li.inflate(R.layout.custom_view, null);
. Então,inflater
tem que ser substituído porli
.Eu estava estendendo um DialogFragment e a resposta acima não funcionou. Eu tive que usar getDialog () para conseguir remover o título:
fonte
O erro não diz exatamente o que há de errado? Você está ligando
requestWindowFeature
esetFeatureInt
depois de ligarsetContentView
.A propósito, por que você está ligando
setContentView
duas vezes?fonte
Para o SDK versão 23 e posterior, a mesma RuntimeException será lançada se você estiver usando AppCompatActivity para estender sua atividade. Isso não acontecerá se sua atividade deriva diretamente da atividade.
Esse é um problema conhecido no Google, conforme mencionado em https://code.google.com/p/android/issues/detail?id=186440
A solução alternativa fornecida é usar o método supportRequestWindowFeature () em vez de usar requestFeature ().
Voto por favor, se resolver o seu problema.
fonte
Altere a versão do SDK de compilação , a versão do SDK de destino para a versão Build Tools para 24.0.0 em build.gradle se você enfrentar um problema na solicitação
fonte
No meu caso eu mostrei
DialogFragment
noActivity
. Neste fragmento de diálogo, escrevi como em DialogFragment remove black border :Remova
setStyle(STYLE_NO_FRAME, 0)
emonCreate()
ou / remover ChandeonCreateDialog
. Porque as configurações da caixa de diálogo foram alteradas após a criação da caixa de diálogo.fonte
Eu tive esse problema com o Dialogs com base em um DialogFragment estendido que funcionou bem em dispositivos executando a API 26, mas falhou com a API 23. As estratégias acima não funcionaram, mas resolvi o problema removendo o método onCreateView (que foi adicionado por mais modelo recente do Android Studio) do DialogFragment e criando a caixa de diálogo no onCreateDialog.
fonte