Intereting Posts

Как файл fileexploler

Как я могу добавить вкладку так, как показано выше.

Я хочу этот тип вкладок, когда я нажимаю элемент, который он показывает выше, может ли кто-нибудь дать фрагмент или ссылки .. и, пожалуйста, сообщите краткое, если доступно, как я могу это сделать .. как показано на рисунке, красный прямоугольник есть какие-либо инструменты для Android Или библиотеки …. или напрямую я могу сделать по коду ??

заранее спасибо

Прямоугольник описываю, что я хочу

Belove – изображение

Введите описание изображения здесь

..

Я сделал для вас простой проект. Вы должны сделать его более красивым, поскольку я не фокусировался на этом, просто на коде.

Сначала добавьте эти значения в свой color.xml

<resources> <color name="buttonGrey">#7A7A7A</color> <color name="layoutHolderStartColor">#F7F7F7</color> <color name="layoutHolderEndColor">#E1E1E1</color> </resources> 

Затем создайте фон для держателя кнопок и назовите его gradient_button_holder.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="@color/layoutHolderStartColor" android:endColor="@color/layoutHolderEndColor" android:angle="270" /> <corners android:radius="3dp" /> </shape> 

Теперь создайте activity_main.xml

Примечание. Я использую некоторые изображения, загружаю весь проект внизу и вынимаю их

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:id="@+id/pathHolder" android:layout_width="match_parent" android:layout_height="35dp" android:layout_alignParentTop="true" android:background="@drawable/gradient_button_holder" android:gravity="center_vertical"> <Button android:id="@+id/btnAdd" android:layout_width="29dp" android:layout_height="29dp" android:layout_alignParentRight="true" android:layout_marginBottom="3dp" android:layout_marginLeft="3dp" android:layout_marginRight="3dp" android:layout_marginTop="3dp" android:background="@color/buttonGrey" android:gravity="center" android:onClick="onBtnAdd" android:text="+" android:textSize="15sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/app_name" android:src="@drawable/seperator" android:visibility="gone"/> <HorizontalScrollView android:id="@+id/btnScrollView" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/btnAdd"> <LinearLayout android:id="@+id/btnFolderHolder" android:layout_width="wrap_content" android:layout_height="35dp" android:orientation="horizontal"> </LinearLayout> </HorizontalScrollView> </RelativeLayout> </RelativeLayout> 

Затем создайте класс Utils

 import android.annotation.SuppressLint; import android.os.Build; import android.view.View; import java.util.concurrent.atomic.AtomicInteger; public class Utils { private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); /** * Generate a value suitable for use in setId(int}. * This value will not collide with ID values generated at build time by aapt for R.id. * * @return a generated ID value */ private static int generateViewId() { for (; ; ) { final int result = sNextGeneratedId.get(); // aapt-generated IDs have the high byte nonzero; clamp to the range under that. int newValue = result + 1; if (newValue > 0x00FFFFFF) { newValue = 1; // Roll over to 1, not 0. } if (sNextGeneratedId.compareAndSet(result, newValue)) { return result; } } } @SuppressLint("NewApi") public static int generateId() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { return generateViewId(); } else { return View.generateViewId(); } } } 

И, наконец, MainActivity

 import android.graphics.Color; import android.os.Environment; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.Button; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; import java.io.File; public class MainActivity extends ActionBarActivity { private LinearLayout btnHolder; private HorizontalScrollView scroller; //parent folders private ViewTreeObserver observer; //needed for the scroll to the end private Toast toast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); makeButtons(Environment.getExternalStorageDirectory().getPath(), "Folder1", "Folder2", "Folder3"); } private void makeButtons(String... values) { StringBuilder sb = new StringBuilder(values.length * 2); for (int i = 0; i < values.length - 1; ++i) { sb.append(values[i]); sb.append(File.separator); addButton(values[i], sb.toString(), true); } sb.append(values[values.length - 1]); addButton(values[values.length - 1], sb.toString(), false); } private void init() { setWidgetConnections(); observer = scroller.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { // this will always scroll to the last folder (displayed on the // right) scroller.fullScroll(HorizontalScrollView.FOCUS_RIGHT); } }); } private void setWidgetConnections() { btnHolder = (LinearLayout) findViewById(R.id.btnFolderHolder); scroller = (HorizontalScrollView) findViewById(R.id.btnScrollView); } public void onBtnAdd(View v) { } private void addButton(final String text, final String path, boolean withImage) { // Dynamic call to add buttons LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); Button btn = new Button(this); btn.setId(Utils.generateId()); btn.setText(text); btn.setTextColor(Color.BLACK); btn.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { goToPath(path); } }); //btn.setBackgroundResource(R.drawable.gradient_button_holder); btnHolder.addView(btn, params); if (withImage) { ImageView view = new ImageView(this); view.setBackgroundResource(R.drawable.seperator2); btnHolder.addView(view, params); } } private void goToPath(String path) { showToast(path); } private void showToast(String text) { if (toast != null) { toast.cancel(); } toast = Toast.makeText(this, text, Toast.LENGTH_SHORT); toast.show(); } } 

Это конечный результат, а также обратите внимание, что он прокручивается по горизонтали

Введите описание изображения здесь

Вы можете скачать весь проект здесь

Это возможно благодаря вашему коду,

Введите описание изображения здесь

В этой линейной компоновке вы должны динамически вставлять другой макет, имеющий представление изображения, представляет собой «>» и текстовое представление, используемое для представления каталога, макет которого будет выглядеть таким образом

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/arrow_image" android:text="Storage"/> <ImageView android:id="@+id/arrow_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/arrow" android:layout_alignParentLeft="true" android:layout_alignBottom="@id/textView" android:layout_alignTop="@id/textView"/> </RelativeLayout> 

При динамическом добавлении представления вам просто нужно сохранить список просмотров, добавленных в учетную запись для clickevents, что позволит вам напрямую переключиться на каталоги. И просто удалите это представление из своего списка просмотра, когда вы вернетесь в предыдущий каталог, и все! Вы сделали это.

И ваш фрагмент кода будет выглядеть следующим образом:

 final ArrayList<View> myDynamicView = new ArrayList<>(); //it would be your list item click list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LayoutInflater inflater = LayoutInflater.from(getActivity()); View dynamicView = inflater.inflate(R.layout.field_layout, null); dynamicView.setId(unique_id); // create a unique id to refer a view TextView directoryName = (TextView) view.findViewById(R.id.textView); directoryName.setText(your_directory_name);//Either fetch it through your array or by extracting the view myDynamicView.add(myDynamicView.size(), dynamicView); linearLayout.addView(dynamicView); dynamicView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for(int i= 0; i < myDynamicView.size(); i++){ //When view is clicked match the view id from the view list if(myDynamicView.get(i).getId() == v.getId()){ //when view id got matched it means remove those view which are ahead of it //from the list as well as from the linear layout for(int j = i; j < myDynamicView.size(); j++){ View view = myDynamicView.get(j); linearLayout.removeView(view); myDynamicView.remove(j); } //update list } } } }); //update your list } }); 

На самом деле это делается с помощью « Создание прокрутки» и обновления разделителя вкладок, или вы даже можете настроить реализацию с помощью HorizontalScrollView и добавления дочернего элемента при переходе в папку и удаления последнего ребенка при возврате.