2013-04-30 2 views
1

그래서 단추 열을 만들려고합니다. 솔루션에 대한 인터넷 검색 후, 내가 찾을 수있는 최선의 종류의 LinearLayout이나 뭔가를 배치하는 것입니다,하지만 내 문제는 내가 조각 (특히 탐색 유형 "탭 + 스 와이프")를 사용하고 그것을 사용하지 않는 것입니다 내가 볼 수있는 한 멀리있는 레이아웃. 내가 만드는 대신 소식을 들었다 레딧/LearnProgramming에서 사람을 통해 상담 후 나는조각의 레이아웃에 단추 열 만들기

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     final TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 

     final Button button = (Button) rootView.findViewById(R.id.button1); 
     button.setText("Btn Text"); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
            // Perform action on click 
      } 
     }); 

처럼 보이도록 생성 된 코드를 수정 하나의 버튼을 얻으려면 (물론, OK, 그것은 pageviewer에 않습니다,하지만) 프로그래밍 방식으로 단추를 만들고 레이아웃 매개 변수를 변경해야하는 모든 단추에 대한 XML. 나는 약간 혼란 스러웠고 도움을 잃어서 Google로 돌아갔습니다. 이 결과 무엇

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     TextView dummyTextView = (TextView) rootView.findViewById(R.id.section_label); 
     dummyTextView.setText(Integer.toString(getArguments().getInt(ARG_SECTION_NUMBER))); 

     for (int i=0;i<4;i++){ 
      final Button newButton = new Button(getActivity()); 
      newButton.setText("This is some text for"+i); 
      newButton.setTag(i); 
      arrList.add(newButton); 
      // ((ViewGroup) rootView).addView(newButton); // Works for a single button 

      ((ViewGroup) rootView).addView(newButton, 0, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

      newButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        newButton.setText("I changed it."); 
       } 
      }); 
      } 

     return rootView; 
    } 

난에있어 겹치지 네 개의 버튼 어떤 페이지 내용의 기본 텍스트 뷰 번호 :처럼 는 그 후, 내 코드는 지금 보인다. 나는 그것들이 겹쳐져 있고 그것들이 모두 겹쳐져있는 것을 볼 수 있기 때문에 그것들이 모두 보여지고 있다는 것을 안다. 나는 프로그래밍에 익숙하지 않다. 그러나 나는 안드로이드 프로그래밍에 새로운 편이다.

필자가 원하는 것은 버튼이 서로 아래에 연속적으로 추가되는 것입니다. 누군가 나를 올바른 방향으로 밀 수 있습니까? 나는 이것을 가능한 한 분명하게 만들었지 만, 당신이 더 많은 정보를 필요로한다면 나는 그것을 추가하게되어 기쁩니다. 미리 감사드립니다. 편집

: 여기 는 fragment_main_dummy.xml에게의

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context=".MainActivity$DummySectionFragment" > 

    <TextView 
     android:id="@+id/section_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <LinearLayout 
     android:id="@+id/MyLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/section_label" 
     android:layout_marginTop="16dp" 
     android:layout_toRightOf="@+id/section_label" 
     android:orientation="vertical" > 
    </LinearLayout> 

</RelativeLayout> 

그래서 상대이지만, 나는 코드에서 어느 곳 RelativeLayout의에 대한 참조를 볼 수 없습니다, 그래서 그것이 아니라는 것을 믿고 리드했다 사용 중인가? 또한 XML에서 LinearLayout을 자식으로 추가하려고 시도했지만 아무 것도하지 않았습니다.

+0

아무도 당신을 도울 수없는 곳'Buttons'이 추가되고 있습니다. 'rootView'가'RelativeLayout' 또는'FrameLayout'이라면, 특별한 'LayoutParams'를 만들지 않았던 것처럼 버튼들이 겹쳐집니다. – Luksprog

+0

나는 그것이 있다고 생각하지 않는다. 이것은 "탭 + 스 와이프"가있는 기본 eclipse 프로젝트의 코드 일뿐입니다. – Vasir

+0

음,'fragment_main_dummy.xml' 파일이 어떻게 생겼는지보실 수 있습니까? 루트 태그가'FrameLayout' 또는'RelativeLayout'입니까 (아니면 그냥 질문에 게시 할 수 있습니다) – Luksprog

답변

1

이 시도 : 당신이 레이아웃 무엇인지 언급하지 않는 경우

for (int i=0;i<4;i++){ 
    final Button newButton = new Button(getActivity()); 
    newButton.setText("This is some text for"+i); 
    newButton.setTag(i); 
    arrList.add(newButton); 
    newButton.setId(1000 + i); 
    RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    rlp.addRule(RelativeLayout.BELOW, i == 0 ? R.id.MyLayout : newButton.getId() - 1); 
    newButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      newButton.setText("I changed it."); 
     } 
    }); 
    ((RelativeLayout) rootView).addView(newButton, rlp); 
} 
+0

이것은 훌륭합니다. 그것은 작동합니다. 감사. 그래서 나는 잘못한 일을하지 않았으며 이전보기 아래에 배치하는 규칙을 결코 부여하지 않았습니다. 내가 클릭 한 트랙을 추적하는 태그가 있습니다. 태그 또는 ID를 사용하여 arraylist에서 어떤 버튼을 누르는지 추적 할 수 있어야합니다. – Vasir

+0

@Vasir 예'RelativeLayout'은 자식에게 배치 규칙을 지정해야합니다. 그렇지 않으면 왼쪽 상단에 다른 배치가 나타납니다. 당신은 ID 또는 태그를 사용할 수 있습니다, 나는 그것을 청소기로 간주 ID를 사용합니다. – Luksprog