2017-03-10 15 views
3

CoordinatorLayoutの下部にTextViewがあります。SnackBarがCoordinatorLayoutに表示されるときにビューを移動します。

しかし、SnackBarと表示すると、TextViewが表示されます。

私はTextViewためBehaviorをカスタマイズし、layoutDependsOnonDependentViewChangedを上書きする必要があります知っているが、それは非常によく修正されません。

ご存知の方は、アドバイスをいただけますか?ありがとう。

+0

xmlをここに追加してもう少し説明すれば、あなたの言うことはより明確になります。あなたの要件は何ですか? –

+0

私はちょうどSnackBarが表示され、SnackBarが消えたときにその位置をリセットするときにSnackBarの上にテキストビューを保持する方法を知りたいだけです。何もしないと、SnackBarはmyTextViewをカバーします。 – xiaoyuan

答えて

1

LinearLayoutに動作を追加し、CoordinatorLayoutに埋め込む必要があります。

これはあなたのやり方です。

MoveUpwardBehavior.class

import android.os.Build; 
import android.support.design.widget.CoordinatorLayout; 
import android.support.design.widget.Snackbar; 
import android.view.View; 


public class MoveUpwardBehavior extends CoordinatorLayout.Behavior<View> { 
    private static final boolean SNACKBAR_BEHAVIOR_ENABLED; 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { 
     return SNACKBAR_BEHAVIOR_ENABLED && dependency instanceof Snackbar.SnackbarLayout; 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 
     float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
     child.setTranslationY(translationY); 
     return true; 
    } 

    static { 
     SNACKBAR_BEHAVIOR_ENABLED = Build.VERSION.SDK_INT >= 11; 
    } 
} 

CustomLinearLayout.class

import android.content.Context; 
import android.support.design.widget.CoordinatorLayout; 
import android.util.AttributeSet; 
import android.widget.LinearLayout; 

@CoordinatorLayout.DefaultBehavior(MoveUpwardBehavior.class) 
public class CustomLinearLayout extends LinearLayout { 
    public CustomLinearLayout(Context context) { 
     super(context); 
    } 

    public CustomLinearLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

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

サンプルXML-> activity_homeここ

user.example.charu.its2017hureeは自分のパッケージ名です!私の活動の最後に

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:fitsSystemWindows="true" 
     android:layout_height="match_parent"> 
     <user.example.charu.its2017huree.CustomLinearLayout 
      android:background="#098" 
      android:gravity="bottom" 
      android:id="@+id/linearLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 
      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="Hello world" /> 
     </user.example.charu.its2017huree.CustomLinearLayout> 

ソースはこのexampleからである

public class HomeActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
     CustomLinearLayout customLinearLayout = (CustomLinearLayout) findViewById(R.id.linearLayout); 
     Snackbar.make(customLinearLayout, "Text to display", Snackbar.LENGTH_LONG).show(); 

    } 

} 
HomeActivityと呼ばれます。

+0

ありがとうございます。ブロックonDependentViewChangedは私が欲しいものです。本当に感謝します。 – xiaoyuan

9

それTextViewにはただのTextView属性に

app:layout_dodgeInsetEdges="bottom"

を追加し、CoordinatorLayoutの直接の子です。

Magic!

関連する問題