19a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki/* 29a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Copyright (C) 2015 The Android Open Source Project 39a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * 49a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License"); 59a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * you may not use this file except in compliance with the License. 69a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * You may obtain a copy of the License at 79a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * 89a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * http://www.apache.org/licenses/LICENSE-2.0 99a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * 109a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Unless required by applicable law or agreed to in writing, software 119a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS, 129a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * See the License for the specific language governing permissions and 149a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * limitations under the License. 159a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki */ 169a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 179a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakipackage com.example.android.support.design.widget; 189a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 199a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport com.example.android.support.design.R; 209a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 219a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.os.Bundle; 22aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Arakiimport android.support.annotation.NonNull; 239a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.support.annotation.Nullable; 249a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.support.design.widget.BottomSheetBehavior; 259a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.view.View; 269a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.Button; 279a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.TextView; 289a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 299a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 309a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki/** 319a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * This demonstrates basic usage of hideable {@link BottomSheetBehavior}. 329a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki */ 339a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakipublic class BottomSheetHideable extends BottomSheetUsageBase { 349a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 359a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki private TextView mTextSlideOffset; 369a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 379a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki private Button mToggle; 389a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 399a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki @Override 409a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki protected int getLayoutId() { 419a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki return R.layout.design_bottom_sheet_hideable; 429a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 439a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 449a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki @Override 459a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki protected void onCreate(@Nullable Bundle savedInstanceState) { 469a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki super.onCreate(savedInstanceState); 47fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mTextSlideOffset = findViewById(R.id.slide_offset); 48fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mToggle = findViewById(R.id.toggle); 499a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setOnClickListener(mOnClickListener); 50fadea5f263e79d628f1bd9afae1f3098fb048b1eYuichi Araki mBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 519a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki @Override 52aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki public void onStateChanged(@NonNull View bottomSheet, 53aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki @BottomSheetBehavior.State int newState) { 549a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki switch (newState) { 559a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki case BottomSheetBehavior.STATE_HIDDEN: 569a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setText(R.string.bottomsheet_show); 579a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setEnabled(true); 589a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki break; 599a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki case BottomSheetBehavior.STATE_EXPANDED: 609a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki case BottomSheetBehavior.STATE_COLLAPSED: 619a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setText(R.string.bottomsheet_hide); 629a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setEnabled(true); 639a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki break; 649a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 659a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 669a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 679a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki @Override 68aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki public void onSlide(@NonNull View bottomSheet, float slideOffset) { 699a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mTextSlideOffset.setText(String.valueOf(slideOffset)); 709a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 719a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki }); 729a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 739a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 749a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki private View.OnClickListener mOnClickListener = new View.OnClickListener() { 759a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki @Override 769a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki public void onClick(View v) { 779a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki if (v.getId() == R.id.toggle && mBehavior != null) { 789a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mToggle.setEnabled(false); 799a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) { 809a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 819a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } else { 829a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); 839a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 849a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 859a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki } 869a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki }; 879a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki 889a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki} 89