2012-08-14 2 views
16

저는 Android 개발을 처음 사용하고 제 자신의 UI를 만들기 시작했습니다. 나는 당신이 (Dynamic Layouts)와 같은 동적으로 무언가를 만들 수 있습니다 것을 볼 :안드로이드에서 동적 대 XML 레이아웃?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ScrollView sv = new ScrollView(this); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    sv.addView(ll); 
    TextView tv = new TextView(this); 
    tv.setText("Name"); 
    ll.addView(tv); 
    EditText et = new EditText(this); 
    ll.addView(et); 
    Button b = new Button(this); 
    b.setText("Ok"); 
    ll.addView(b); 
} 

그러나 나는 또한 넷빈즈 파일 자원 -> 레이아웃 -> main.xml에을 가지고 참조하십시오.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, AndroidTest" 
    /> 
</LinearLayout> 

그래서 내 질문에 내가 사용해야한다 : 그래서 당신은 UI ( Declaring XML layout)에 대한 XML 레이아웃을 만들 수 있습니까? 어떤 것이 권장되며, 안드로이드 개발에서 동적 대 XML 레이아웃의 장단점은 무엇입니까?

답변

25

레이아웃 XML 리소스 파일을 사용하십시오.

먼저 자원 세트 (예 : res/layout/)를 사용하면 서로 다른 상황에서 사용할 여러 UI를 정의 할 수 있으며 시스템은 필요에 따라 자동으로 올바른 UI를 선택합니다. Java에서 이와 동등한 표현은 if 또는 switch 문입니다.

둘째, 레이아웃 리소스를 성공적으로 만들 수있는 도구가 있습니다. Eclipse의 드래그 앤 드롭 GUI 건물이 차 한잔이 아니더라도 (예 : NetBeans를 사용하는 경우), Lint는 레이아웃의 결함을 지적하는데 도움을 줄 것이며, 레이아웃의 결함을 지적 할 것입니다. 동등한 자바 코드.

셋째, 좀 더 간결한 경향이 있으므로 수동으로이 내용을 입력하면 XML 입력이 줄어 듭니다.

넷째, 찾을 샘플 코드 중 약 98 %가 레이아웃 XML 파일을 사용하며 여기 StackOverflow (및 기타 지원 리소스)에서 찾은 모든 UI 응답의 약 98 %가 레이아웃 XML 파일을 사용한다고 가정합니다. XML을 피하는 것은 자유이지만 어린 아이와 같은 꺾쇠 괄호로 공격 당했을 수도 있습니다. 대부분의 안드로이드 개발자들이하는 것과 비교하여 현재와 싸우며 상류에서 수영을 할 것입니다.

+0

+1 감사합니다. 그러면 XML이됩니다. 나는 안드로이드 사이트에서 XML을 사용하여 대부분의 코드를 사용하고 있지만 느낌이 들었다. –

+5

또한 Java 코드에서 레이아웃을 어떻게 보이는지 보려면 코드를 컴파일하고 실행해야하지만 XML에서는 (Eclipse를 사용하는 경우) Eclipse에서 제공하는 도구로 직접 볼 수 있습니다. –

3

프로젝트의 대부분 부분에 xml 레이아웃을 사용하는 것이 좋습니다. 당신과 같은 다른 폴더에있는 레이아웃을 넣을 수 있습니다 :

레이아웃 - 땅 -> 풍경에 대한

레이아웃 - 포트 -> 초상화

레이아웃-V15을 -> 안드로이드 버전> = 15

을위한

레이아웃 sw600dp - 싸다를 코딩 할 필요없이> 이러한 자원의 분류를 사용하여 특정 폭

와 화면에 대한 신속, 안드로이드 장치의 넓은 범위를 지원하도록 레이아웃의 다양한있을 수 있습니다 여분.

내 생각에, 이것은 모든 레이아웃을 동적으로 생성하는 것과 비교하여 XML 리소스를 사용하는 가장 큰 이점입니다. 더 많은 정보를 원하시면 this link about resources

+0

+1 이제 xml에 UI 불일치에 대한 몇 가지 걱정이 내 뒤에서도 벗겨 질 것입니다 –

1

글쎄, 내가 그렇게 쉽게 작업 할 수 있기 때문에 mu UI를 xml (99 %)로 선언합니다.

그것은 별도의 UI 및 코드 로직에 좋은 습관이다는, XML은

또한, 하나의 안드로이드 응용 프로그램은 휴대폰과 여러 디자인을 (할 수 있습니다 (this old designer 사용을 고려하거나 IDE를 이클립스로 전환하고 디자이너) UI를 설명 쉽습니다 특히 편집 정제)하고 손으로 코드를 자바

에서

간단히, 사용 XML이

+0

+1 Eclipse에 대한 비주얼 디자이너가 안드로이드를 제공합니까? –

+1

예, 그것은 일식을위한 ADT 플러그인의 일부입니다 ..... [help] (http://developer.android.com/sdk/installing/installing-adt.html) –

+0

XML의 사용은 UI와 코드 로직을 분리하지 않습니다. . –

1

나는 당신이 코드의 내용을 분리 할 수 ​​있습니다 대부분의 것들에 대한 XML을 선호하는 고통 스럽다 될 것이며이 경향은 청소기합니다 프로젝트가 커지고 얼마 전에 쓴 것을 잊었을 때. XML과 스타일을 사용하면 앱 전체에서 일관된 모양과 느낌을 얻을 수 있습니다. 또한 레이아웃 시스템이 무거운 짐을 처리 할 수있게 해 주므로 활동의 컨텍스트에 대한 참조가있는 뷰로 끝나지 않습니다. (회전하고 활동을 다시 만들 때 나빠질 수 있습니다.) 전반적으로 더 빠른 옵션이되는 경향이 있습니다. XML로 할 수 있다면 제가 좋아하는 것보다 좋습니다. 안드로이드 아키텍처/교과서의 대부분은이 설정을 따르는 것으로 보입니다.

동적은 더 진보 된 방식으로 일부 항목을 사용자 정의 할 수 있고 일부 레이아웃 문제를 상당히 쉽게 수정할 수있는 장점이 있습니다. 그 이외의 몇 가지 단점이 있지만 XML에서 모든 것을 먼저 수행하는 것이 더 좋으며 수행하기가 어렵거나 어려운 경우 코드에서 수행하는 것이 좋습니다. 코드에서보다 XML에서 훨씬 쉽게 할 수있는 것들이 있습니다.

1

완전히 자신의 선택입니다. 대부분의 Android 개발자는 XML을 사용하여 앱의 레이아웃을 코딩 할 수 있습니다. 이는이를 위해 특별히 설계 되었기 때문입니다. 그러나 저는 개인적으로 게임 개발 배경에서 왔으며 실제로 Android의 제공된 UI 위젯을 필요로하지 않습니다. 그래서 UI 위젯을 사용할 때 자바로 코딩합니다.

이 정보가 도움이되기를 바랍니다.

Button myButton = (Button) findViewById(R.id.my_button); 

그래서 당신은 하나의 캐스팅 시간 XML의 검색을 소모을 가지고 사용하기 때문에 XML을 기반으로

+0

+1 감사합니다. –

2

레이아웃, 캐스팅에 따라 달라집니다. 동적으로 UI를 만드는 경우 관리하기가 훨씬 어렵습니다. 모든 것을 구성해야하지만 많이 캐스팅 할 필요는 없습니다.

나는 세 번째 해결책을 선호합니다 - RoboGuice 의존성 주입 패턴을 사용하며 캐스팅에 신경 쓰지 않아도 응용 프로그램을 만드는 것이 더 빠릅니다. 또한 더 유연합니다. 일반 텍스트 필드가 있다고 가정하십시오. 그런 다음 텍스트 영역으로 변경하려고합니다. RoboGuice에서는 2 가지 변경 사항 (사용 변경 제외) 만 있습니다. Context를 사용할 때 더 빠릅니다 (Context는 매우 많은 메모리를 소비하며 참조를 저장하는 것은 잘못된 코딩의 표시입니다).

제 조언은 UI를 관리하는 것이 단순하기 때문에 XML을 사용하는 것입니다. 코드를 빨리 작성하려면 RoboGuice을 사용하십시오.

관련 문제