2012-04-26 4 views
3

나는 tableview를 가지고 있는데, 여기에서 새로운 행을 만들고 레이아웃을 수동으로 설정합니다. 모든 행에는 이미지, 제목에 대한 텍스트보기 및 설명을위한 텍스트보기라는 세 가지 주요 요소가 있습니다. 내가 원하는 위치로 이동하려면 두 개의 선형 레이아웃을 사용합니다. descView라는 이름의 설명을위한 textview가 두 줄의 텍스트를 보여주기를 원하지만 대신 하나만 보여줍니다. 무엇을 잘못했는지 또는 어떤 방법으로 호출했는지를보기 위해 두 줄에 텍스트가 표시됩니다. 단어 (숯이 아닌)로 텍스트를 래핑하는 경우 완벽 할 것입니다. 내가 지금 무엇을의Android : 콘텐츠를 둘러싸 기 위해 texview를 강제 실행합니다.

스크린 샷 :

private TableRow formRow(New item) { 

    //prepare table row parameters 
    TableRow tr = new TableRow(this); 
    tr.setBackgroundResource(R.drawable.results_table_row); 
    tr.setVerticalGravity(Gravity.CENTER); 
    tr.setTag(item.getTitle()); 
    tr.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      if (event.getAction() == MotionEvent.ACTION_UP) { 
       v.setBackgroundResource(R.drawable.results_table_row); 

      } else if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       v.setBackgroundResource(R.drawable.results_table_row_touched); 
      } 
      return true; 
     } 
    }); 


    //create main layout for content 
    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.HORIZONTAL); 

    //add image 
    int imageID = Integer.parseInt(item.getPictureSrc()); 
    ImageView image = new ImageView(this); 
    image.setImageResource(imageID); 
    image.setPadding(5, 5, 5, 5); 
    layout.addView(image); 

    //add another layout for title and description 
    LinearLayout descLayout = new LinearLayout(this); 
    descLayout.setOrientation(LinearLayout.VERTICAL); 
    descLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

    //add title 
    TextView titleView = new TextView(this); 
    titleView.setText(item.getTitle()); 
    titleView.setPadding(5, 0, 0, 0); 
    titleView.setTextAppearance(this, R.style.TableRowStyle_ChildTitle); 
    titleView.setLines(1); 
    descLayout.addView(titleView); 

    //add description 
    TextView descView = new TextView(this); 
    descView.setText(item.getDescription()); 
    descView.setPadding(5, 0, 0, 0); 
    descView.setTextAppearance(this, R.style.TableRowStyle_ChildText); 
    descView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE); 
    descView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    //descView.setEllipsize(TextUtils.TruncateAt.END); 
    descView.setLines(2); 
    descLayout.addView(descView); 

    //add description layout to main layout 
    layout.addView(descLayout); 

    //finally, add layout to row 
    tr.addView(layout); 

    return tr; 
} 
: 새 행을 만드는

enter image description here

코드 (I는 정보를 저장 객체 (텍스트, 이미지 등) '새'입니다)

+0

이 http : // stackoverflow에 따르면.com/questions/2197744/android-textview-text-not-getting-wrapped 안드로이드를 설정해야합니다 : width = "0dip" – amb

+0

어떻게 코드로이를 수행 할 수 있습니까? 나는'descView.setLayoutParams (새로운 LayoutParams (0, LayoutParams.WRAP_CONTENT));를 시도했다. ',하지만 이번에는 아무 텍스트도 보이지 않습니다. –

+0

실제 너비 (> 0)를 설정하면 텍스트가 표시되고 줄 바꿈되는 것처럼 보입니다. 그러나 너비는 설정합니다. 얻을 수있는 폭을 설정하는 방법? –

답변

0

내가 어떤 번호로 최대 라인을 설정하고 첫 번째 점에 문자를 계산하여 문자 길이를 설정 ~ 희망이 도움이. 그래서 지금은 응용 프로그램이 얼마나 많은 정보를 표시하고 어떤 버그도 나타나지 않습니다.

0

TableRow에 1 열만있는 경우 TableLayout에있는 android:shrinkColumns="0"을 설정하면 문제를 해결하는 데 도움이됩니다. 당신의 TableRow에


추가 배치 매개 변수 :

tr.setLayoutParams(new LayoutParams(TableLayout.LayoutParams.FILL_PARENT, 
     TableLayout.LayoutParams.WRAP_CONTENT)); 
+0

코드에서, TableLayout에'setShrinkAllColumns (true)'를 설정하면 행이 정상적으로 표시되기 때문에 – waqaslam

+0

실제로 작동하지 않을 수 있습니다. 그러나 texview는 모든 텍스트를 표시하지 않습니다. 그것은 단지 한 줄을 보여주고 그 이후의 모든 것을 자른다. –

+0

내 업데이트 된 답변보기 – waqaslam

1

내 일부 응용 프로그램이 같은 비슷한 설정을 가지고 있지만 개인적으로 그런 일에, 나는 둘은 LinearLayouts 및 사용을 스크랩 것 이것에 대한 하나의 RelativeLayout의는 내가 치우는 시도합니다 :

descView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE); 
descView.setLines(2); 

그럼 난 그 텍스트 뷰 세트의 폭과 서로 측면에 상대적으로 항목을 위치 것 FILL_PARENT까지 그리고 그 높이는 WRAP_CONTENT.

당신은 RelativeLayout의와 그것에 대해 훨씬 더 균일 한 모양을 얻을 수 : ALIGN_PARENT_LEFT와

설정 이미지 뷰는 오른쪽과 왼쪽에 그것을 X-딥의 마진을 제공합니다.

그런 다음 Title TextView를 추가하고 ImageView의 오른쪽에 정렬하십시오.

그런 다음 Description TextView를 추가하고이를 ImageView의 오른쪽에 정렬하고 제목 아래에 맞 춥니 다.

코드를 통해이 작업을 수행하기 때문에 동일한 글꼴 스타일 (제목이 굵게 표시되어 있음)과 제목/설명 모두에 대해 단일 TextView로 보이기 때문에 한 단계 더 나아갑니다.

textView.setText(Html.fromHtml("<b>" + item.getTitle() + "</b><br>" + item.getDescription())); 

그냥 당신이 모든에게로 연결하는 고유 ID를주고 있는지 확인하고 아직 표시되지 않은 무언가에 정렬하지 않거나 당신은 NPE를 던질거야 아니면 그냥 원 : 그럼 그냥 사용 전혀 표시되지 않습니다.

하지만 예, 어느 날 LinearLayout을 통해 여러 구성 요소가있는 항목을 나열하는 데 RelativeLayout을 사용하겠습니다.

관련 문제