android studio requestFeature()는 내용을 추가하기 전에 호출되어야합니다.




how to use constraintlayout in android studio (6)

나는 DialogFragment를 확장하고 있었고 위의 대답은 그다지 효과없었 습니다. 제목을 제거하려면 getDialog ()를 사용해야했습니다.

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

사용자 정의 제목 표시 줄을 구현하려고합니다.

여기 내 헬퍼 클래스입니다 :

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);
        }
    }
}

다음은 onCreate ()에서 호출하는 위치입니다.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupUI();
}

private void setupUI(){
     setContentView(R.layout.main);
     UIHelper.setupTitleBar(this);
}

하지만 오류가 발생합니다.

requestFeature() must be called before adding content

SDK 버전 23 이상에서는 AppCompatActivity를 사용하여 활동을 확장하는 경우 동일한 RuntimeException이 발생합니다. 귀하의 활동이 활동에서 직접 파생되는 경우에는 발생하지 않습니다.

https://code.google.com/p/android/issues/detail?id=186440 언급 된 Google의 알려진 문제입니다.

이것에 대한 해결 방법은 requestFeature ()를 사용하는 대신 supportRequestWindowFeature () 메소드를 사용하는 것입니다.

문제가 해결되면 upvote하십시오.


오류가 무엇이 잘못되었는지 정확하게 알려주지 않습니까? setContentView 호출 한 후 requestWindowFeaturesetFeatureInt 를 호출합니다.

그런데 setContentView 두 번 호출하는 이유는 무엇입니까?


글쎄, 오류 메시지가 알려주는대로하십시오.

requestFeature() 전에 setContentView() 를 호출하지 마십시오.

노트 :

댓글에서 언급했듯이, ActionBarSherlockAppCompat 라이브러리 모두에서 ActionBarSherlock requestFeature() 전에 requestFeature() 를 호출해야 requestFeature()


필자의 경우에는 Activity 에서 DialogFragment 를 보여주었습니다. 이 대화 상자에서 나는 DialogFragment에 다음과 같이 썼습니다 : 검정 테두리 제거 :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setStyle(STYLE_NO_FRAME, 0)
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    super.onCreateDialog(savedInstanceState)

    val dialog = Dialog(context!!, R.style.ErrorDialogTheme)
    val inflater = LayoutInflater.from(context)
    val view = inflater.inflate(R.layout.fragment_error_dialog, null, false)
    dialog.setTitle(null)
    dialog.setCancelable(true)
    dialog.setContentView(view)
    return dialog
}

onCreate() 에서 setStyle(STYLE_NO_FRAME, 0) 을 제거하거나 onCreateDialog 제거합니다. 대화 상자가 생성 된 후에 대화 상자 설정이 변경 되었기 때문입니다.


요청에 따라 문제가 발생하면 build SDK 버전 , 대상 SDK 버전Build Tools 버전build.gradle 에서 24.0.0으로 변경하십시오.





android-activity