2013-07-09 5 views
1

Java보기 객체로 확장 할 간단한 xml이 있습니다. 내가보기를 부풀게하는 방법을 알고 :부모가없는 사용자 정의보기로 xml을 부 풀리는 방법

view = LayoutInflater.from(context).inflate(R.layout.alarm_handling, this); 

을하지만 그때 나는 부모 (이)의 자식 인 볼 수 있습니다. 그리고 난잡한 문제는 레이아웃 매개 변수를 설정하고 필요없는 추가 레이아웃을 갖는 것으로 시작됩니다. 이것들은 XML에서하는 것이 훨씬 쉽습니다.

액티비티에서는 setContentView()를 호출 할 수 있지만보기가 불가능합니다.

결국 나는 다른 XML에서 참조 할 수있는 Java 클래스 (extends ViewSomething)를 갖고 싶습니다. 나는 거의 최종 :(그래서

public class AlarmView extends ViewStub{ //could work if ViewStub wasn't final 

public AlarmView (Context context, AttributeSet attrs) { 
    super(context); 

    //using methods from ViewStub: 
    setLayoutResource(R.layout.alarm_handling); 
    inflate(); 
} 
} 

이에? 무엇 단지 된 setContentView() 또는 setLayoutResource()를 호출 할 수 있도록 확장하는 방법을 것을 제외하고는 대답 ViewStub에서 보았다?

나는 대답 많은 보았지만 그들 중 누구도 내 질문에 적합하지 않습니다.

+0

나는 약간 의아해합니다. null 부모 (I.E. inflate (R.layout.alarm_handling, null) 또는 일부 변형)가 포함 된보기를 부 풀릴 수 있다고 생각하지만 xml에서 사용자 정의보기를 사용하려는 것과 매우 유사합니다. 당신은 당신의 문제가 당신은 사용자 정의 XML 인플레이터 싶어? –

+0

커스텀 XML 인플레이터가 필요한지 모르겠습니다. 나는 그것의 자신의 레이아웃을 처리하는 커스텀 컴포넌트를 만들고 싶다. – bluevoid

답변

5

을 지금까지 나는 당신이 당신이하려고하는 것보다 조금 다르다 적용 할 트릭을 이해한다.

없음 ViewStub은 ViewStub의 솔루션이 매우 다른 방법입니다. 모든 것. 다음

<FrameLayout match_parent, match_parent> 
    <ImageView src="Myimage", wrap_content, Gravity.LEFT/> 
    <TextView text="hello world", wrap_content, Gravity.CENTER_HORIZONTAL/> 
</FrameLayout> 

당신이 FrameLayout이를 확장하고 내부의이 XML을 팽창하고 싶지 않은 :

의 당신의 XML 레이아웃이 같은 (불완전, 단지 아이디어를 보여주는) 인 예를 위해 가정 해 봅시다 그 이유는 두 개의 FrameLayouts (하나는 다른 하나의 안쪽에 있음)를 가지게 될 것이고 그것은 단지 메모리와 처리 시간의 어리석은 낭비 일 뿐이 기 때문입니다. 나는 동의한다.

그러나 트릭은 XML에서 merge을 사용하는 것입니다.

<merge match_parent, match_parent> 
    <ImageView src="Myimage", wrap_content, Gravity.LEFT/> 
    <TextView text="hello world", wrap_content, Gravity.CENTER_HORIZONTAL/> 
</merge> 

만 1 FrameLayout이있을 것이다

FrameLayout이

public class MyWidget extends FrameLayout 
    // and then on your initialisation/construction 
    LayoutInflater.from(context).inflate(R.layout.alarm_handling, this); 
확장 위젯과 화면에서 최종 레이아웃에 정상적으로 팽창.

행복한 코딩!

+0

쿨, 그게 내가 찾고있는 것처럼 들리네! 나는 그것이 저를 위해 작동하는지보기 위하여 그것을 줄 것이다. – bluevoid

+0

그것은 beautifull 작동합니다,이 일을 어디서 일을 바로 잡기 위해 Java 클래스의 LayoutParams 설정되어 내 프로젝트에서 코드를 많이 걸립니다. 고맙습니다! – bluevoid

+0

위대한 작품. 유일한 문제는 원래 태그가 FrameLayout, LinearLayout 또는 RelativeLayout인지 여부를 알 수 없기 때문에 android Studio의 UI 미리보기에서 레이아웃의 내용을 표시하는 방법을 알 수 없다는 것입니다. – gardenofwine

관련 문제