2013-07-19 2 views
5

많은 답을 확인했지만 지금까지 아무 것도 도움이되지 않았습니다.사용자 정의 TextView의 여백

나는 안드로이드의 TextView를 확장하고 코드 내부에이 사용자 정의보기의 여백을 설정하려고한다. 버튼 프레스와 비슷한 것들을 인스턴스화 할 것이기 때문이다. LinearLayout에 추가됩니다. 그게 내가 가진 것입니다 :

public class ResultsView extends TextView { 
    public ResultsView(Context context) { 
     super(context); 
     LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     layout.setMargins(15, 15, 15, 15); 
     setLayoutParams(layout); 
    } 
} 

어디에도 여백이 없습니다.

EDIT : xml에 여백 값을 할당하면 추가 할 수 있습니다.

답변

14

나는 문제는 시간에 당신이의 LayoutParams가 아직 설정되지 않은 여백을 추가하려는 것으로, 생각, 왜 당신이 당신의 ResultsView 클래스에서이 메서드를 재정의하려고 그나마 : 그래서 지금 당신은 같은 뭔가가 필요 :

 protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
      MarginLayoutParams margins = MarginLayoutParams.class.cast(getLayoutParams()); 
      int margin = 15; 
      margins.topMargin = margin; 
      margins.bottomMargin = margin; 
      margins.leftMargin = margin; 
      margins.rightMargin = margin; 
      setLayoutParams(margins); 
     }; 

그리고 당신은 생성자에있는 코드를 제거, 우리는 우리가보기의 레이아웃 개체가 확인 될 때까지 여유가 적용됩니다이 방법은,이

감사합니다 도움이되기를 바랍니다!

+0

예! 정말 고마워! 이전에 비슷한 것을 시도했지만, onFinishInflate는 작동하지 않았습니다. 이것이 성과면에서 얼마나 좋은지 알고 있습니까? 이미 한 번 설정했는지 여부를 확인하기 위해 부울을 추가하는 것이 좋을까요? – tom

+0

나는 그런 거대한 실적의 충격이라고 생각하지 않는다. 그러나 만약 당신이 그것에 대해 걱정한다면, 당신이 원한다면 단지 한 번만 할 깃발을 추가 할 수있다. –

+1

아마 차원을 수정하는 것만으로 도망 갈 수 있다고 생각한다. onLayout()에 전달됩니다 (예 : left + = leftMargin, right = rightMargin, top + = topMargin, bottom- = bottomMargin, super.onLayout (changed, left, top, right, bottom)); – kcoppock

0

이제이보기를 현재 표시된 레이아웃에 추가해야합니다. 다음 단계가 누락되었습니다.

currentlayout.addview(View); 
+0

XML로 추가됩니다. LinearLayout에서 textviews를 볼 수는 있지만 여백은 없습니다. – tom