美文网首页
MaxHeightScroolView 的一个问题

MaxHeightScroolView 的一个问题

作者: 刘尔泽 | 来源:发表于2017-12-08 15:57 被阅读22次

描述

一个控制最大高度的scrollVIew,也就是 内容少的时候 wrap content, 多的时候有个最大高度
存在的问题是没有 起作用

xml code

<com.common.components.MaxHeightScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/notification_dialog_bg"
        android:fadingEdge="none"
        android:overScrollMode="never"
        android:scrollbars="none">

        <!--怎么直接这样写有问题-->

        <TextView
            android:id="@+id/content_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="25dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp"
            android:text=""
            android:textColor="#333333"
            android:textSize="13sp" />
    </comcommon.components.MaxHeightScrollView>

MaxHeightScrollView


import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Display;
import android.widget.ScrollView;

/**
 */
public class MaxHeightScrollView extends ScrollView {
    private Context mContext;

    public MaxHeightScrollView(Context context) {
        super(context);
        init(context);
    }

    public MaxHeightScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);

    }

    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        mContext = context;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        try {
            Display display = ((Activity) mContext).getWindowManager().getDefaultDisplay();
            DisplayMetrics d = new DisplayMetrics();
            display.getMetrics(d);
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(d.heightPixels / 3, MeasureSpec.AT_MOST);

        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

这是我 塞入文字的地方

    private void init() {
        setContentView(R.layout.dialog_notification_user);
        setCanceledOnTouchOutside(false);
        showContentTV = (TextView) findViewById(R.id.content_tv);
    }
    public NotificationDialogInUser showWhat(String str) {
        if (showContentTV != null) {
            showContentTV.setText(str + str + str + str + str + str + str +str + str + str + str);
        }
        return this;
    }

目前效果是这样

image.png

待解决 ???

断点 MaxHeightScrollView 的 measure 没走。

还有怀疑是 background 的 .9 图的事儿,换成一般的颜色也不对,所以排除.9图的问题

解决

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        init();
        showContentTV.setText(contenStr);
    }

    private void init() {

        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.dialog_notification_user, null);
        setContentView(view);
        //setContentView(R.layout.dialog_notification_user);
        //**************************************
        //setContentView(R.layout.dialog_notification_user); 有问题, MaxHeightScrollView 失效,onMeasure 未能触发
        // 所以搞清楚他们之间的关系
        // 1. View view = inflater.inflate(R.layout.dialog_notification_user, null);
        // 2. RV  中的 holder new DescHolder(mInflater.inflate(R.layout.search_attribute_desc_item, parent, false));
        //**************************************
        setCanceledOnTouchOutside(false);
        Window dialogWindow = getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        lp.width = ScreenUtil.WIDTH - 200;
        //lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        dialogWindow.setAttributes(lp);
        dialogWindow.setGravity(Gravity.CENTER);
        showContentTV = (TextView) findViewById(R.id.content_tv);
        close = (ImageView) findViewById(R.id.close_btn);

        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }

相关文章

  • MaxHeightScroolView 的一个问题

    描述 一个控制最大高度的scrollVIew,也就是 内容少的时候 wrap content, 多的时候有个最大高...

  • 一个孩子的问题不是一个孩子的问题

    《教子心理学》---凌康桐先生课程摘录分享 一、父母对子女的关注及教育重点: 1.令孩子(身、心)健康---培养孩...

  • 一个问题叠着一个问题

    今天的词语听写,孩子们做得不错,点赞! 但是,新的问题冒出来:阅读理解题要不不做,要不就瞎写,95%的学生都这样,...

  • ActiveMQ的一个问题

    最近一直被ActiveMQ的一个问题困扰,现象是跑了一段时间后,突然停了,再次启动失败,日志如下: 2021-08...

  • 一个时代的问题

    有人问我公理和正义的问题 ·杨牧 有人问我公理和正义的问题 写在一封...

  • svn的一个问题

    SVN:Thisclientistoooldtoworkwithworkingcopy 方法一:svn clean...

  • 前端的一个问题

    发现了一个离奇的错误 这样写绝对没问题。。。 $("#area-search>a").removeClass("s...

  • 一个温柔的问题。

    一周前,一些朋友收到了来自我的一个问题:你觉得你爸爸温柔吗?没有前文铺垫的提问,可能有些突兀,但我希望这个温柔的问...

  • 一个严肃的问题

    一个严肃的问题: 卖萌是否能有效的提升员工的工作积极性和工作效率? 非常严肃的问题, 比如PM都对RD卖萌, RD...

  • 一个现实的问题。

    东北辽宁某个农村是我的老家,祖祖辈辈都在那里。90年代之初,村上还有小工厂,随着2000年前后的国企改制,工人下岗...

网友评论

      本文标题:MaxHeightScroolView 的一个问题

      本文链接:https://www.haomeiwen.com/subject/mfmeixtx.html