| // Copyright (C) 2016 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package com.google.reviewit.util; |
| |
| import android.os.Build; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.view.ViewTreeObserver; |
| import android.widget.LinearLayout; |
| import android.widget.TableLayout; |
| import android.widget.TableRow; |
| |
| public class LayoutUtil { |
| public static ViewGroup.LayoutParams matchLayout() { |
| return new ViewGroup.LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, |
| ViewGroup.LayoutParams.MATCH_PARENT); |
| } |
| |
| public static ViewGroup.LayoutParams matchAndWrapLayout() { |
| return new ViewGroup.LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, |
| ViewGroup.LayoutParams.WRAP_CONTENT); |
| } |
| |
| public static ViewGroup.LayoutParams matchAndFixedLayout(int height) { |
| return new ViewGroup.LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, height); |
| } |
| |
| public static ViewGroup.LayoutParams fixedLayout(int width, int height) { |
| return new ViewGroup.LayoutParams(width, height); |
| } |
| |
| public static ViewGroup.LayoutParams fixedLinearLayout( |
| int width, int height) { |
| return new LinearLayout.LayoutParams(width, height); |
| } |
| |
| public static TableLayout.LayoutParams matchAndWrapTableLayout() { |
| return new TableLayout.LayoutParams( |
| TableLayout.LayoutParams.MATCH_PARENT, |
| TableLayout.LayoutParams.WRAP_CONTENT); |
| } |
| |
| public static TableRow.LayoutParams matchAndWrapTableRowLayout() { |
| return new TableRow.LayoutParams( |
| TableRow.LayoutParams.MATCH_PARENT, |
| TableRow.LayoutParams.WRAP_CONTENT); |
| } |
| |
| public static TableRow.LayoutParams wrapTableRowLayout() { |
| return new TableRow.LayoutParams( |
| TableRow.LayoutParams.WRAP_CONTENT, |
| TableRow.LayoutParams.WRAP_CONTENT); |
| } |
| |
| public static TableRow.LayoutParams wrapTableRowLayout(int span) { |
| TableRow.LayoutParams params = new TableRow.LayoutParams( |
| TableRow.LayoutParams.WRAP_CONTENT, |
| TableRow.LayoutParams.WRAP_CONTENT); |
| params.span = span; |
| return params; |
| } |
| |
| public static void addOneTimeOnGlobalLayoutListener(final View view, final |
| OneTimeOnGlobalLayoutListener oneTimeOnGlobalLayoutListener) { |
| view.getViewTreeObserver().addOnGlobalLayoutListener( |
| new ViewTreeObserver.OnGlobalLayoutListener() { |
| @Override |
| public void onGlobalLayout() { |
| oneTimeOnGlobalLayoutListener.onFirstGlobalLayout(); |
| |
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
| view.getViewTreeObserver().removeOnGlobalLayoutListener(this); |
| } else { |
| view.getViewTreeObserver().removeGlobalOnLayoutListener(this); |
| } |
| } |
| }); |
| } |
| |
| /** |
| * <code>OnGlobalLayoutListener</code> which is invoked only once. |
| */ |
| public interface OneTimeOnGlobalLayoutListener { |
| void onFirstGlobalLayout(); |
| } |
| |
| public static void addOnHeightListener(final View view, final |
| OnHeightListener onHeightListener) { |
| addOneTimeOnGlobalLayoutListener(view, new OneTimeOnGlobalLayoutListener() { |
| @Override |
| public void onFirstGlobalLayout() { |
| onHeightListener.onHeight(view.getHeight()); |
| } |
| }); |
| } |
| |
| /** |
| * Listener that is invoked once the height of the widget is known. |
| */ |
| public interface OnHeightListener { |
| void onHeight(int height); |
| } |
| } |