Android 여러 줄 텍스트 축소 확장 효과

2272 단어
항목에 여러 줄의 텍스트가 있을 때 기본적으로 두 줄을 표시하고 전체 텍스트 단추를 누르면 모든 요구 사항을 표시합니다.참고 [참고 링크][1] 실현, 다음은 자신의 생각들입니다.텍스트를 표시하는 데는 textview를 사용해야 하지만, 텍스트가 많을 때 기본적으로 2줄을 표시하는 것은 어떻게 합니까?우리는 인터넷에서 데이터를 얻어서 데이터를 얻은 후에 그것을 표시하도록 한다. 두 줄이 넘으면 두 줄만 표시하고 어떻게 두 줄이 넘으면 두 줄만 표시하는가. 직접setText로 내용을 완전히 표시하고 두 줄을 초과할 수도 있다.textView가 얼마나 높게 보이는지는height 속성 제어입니다. 만약 우리가 textView의 높이를 2줄의 높이로 설정한다면 textView가 2줄을 표시하는 것이 아닙니까? 네, 그렇습니다.생각이 이렇다. 그럼 두 줄이 얼마나 높은지 어떻게 알겠는가.textView의api에 getLineHeight () 방법이 있습니다. 그렇습니다. 이 방법이 바로 1줄의 높이입니다. 바로 우리가 필요로 하는 것입니다.이렇게 하면 우리는 직접textView의 높이를 getLineHeight()2로 설정한다. 모든 내용이 2줄의 높이에 도달할 수 있는 것은 아니기 때문에 우리는 먼저 textView가 총 몇 줄을 표시했는지 판단해야 한다. 줄 수가 2줄을 초과할 때textView의 높이를 단행 높이2로 설정하고textView의 Api를 다시 살펴보면 getLineCount() 방법을 발견할 수 있다. 우리가 기대한 바와 같이방법을 바꾸면 textView가 표시하는 총 줄 수를 되돌려줍니다.setText 내용이 표시된 후에 바로 변경 값을 얻을 수 있음을 주의하십시오.그래서 우리는 직접:
  tvContent.post(new Runnable() {
            @Override
            public void run() {
                int showCount = tvContent.getLineCount();
                tvAllSign.setVisibility(maxLine  maxLine) {
                    int singleHeight = tvContent.getLineHeight();
                    tvContent.setHeight(maxLine * singleHeight);
                }

            }
        });


상기 두 가지 방법의 지탱이 있어 접는 사고방식을 펼치면 매우 뚜렷하다. 줄 수가 2줄을 초과할 때 접기를 누르면textview의 높이를 2줄의 높이로 설정하면 접기를 실현할 수 있다.줄 수가 2줄이면 전문을 누르면 textView의 높이를 getLineCount () * getLineHeight () 로 설정합니다.직접 설정의 변화가 약간 갑작스러우므로 Value Animator를 사용하여 고도의 점차적인 변화를 요구치에 도달할 시간을 주십시오.
구덩이1: 사용자 정의 속성 textSize 속성을 사용할 때 주의하십시오
 textSize = typedArray.getDimensionPixelSize(R.styleable.ExpandableTextview_textSize,11);

textSize를 검색한 후
tvAllSign.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSignSize);

텍스트 크기를 설정합니다. 값을 가져오는 것은textSize를 설정하는 것과 같은 방식을 사용합니다. 그렇지 않으면 textView 크기는 당신이 원하는 것이 아닙니다.setText의 소스:
  public void setTextSize(float size) {
        setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
    }

기본적으로 사용되는 단위는 sp입니다.
자체 테스트 결과:
typedArray.getDimensionPixelOffset(R.styleable.TestTextSize_customSize,11);

얻은 것은 수치의 정수 부분으로 반올림이 없다.예컨대 11.8 얻은 것도 11.

좋은 웹페이지 즐겨찾기