美文网首页
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 的一个问题

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