• Stars
    star
    1,838
  • Rank 25,253 (Top 0.5 %)
  • Language
    Java
  • License
    MIT License
  • Created over 10 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Android ListView that mimics a GridView with asymmetric items. Supports items with row span and column span

AsymmetricGridView

Android Arsenal Build Status

An Android custom ListView that implements multiple columns and variable sized elements.

Please note that this is currently in a preview state. This basically means that the API is not fixed and you should expect changes between releases.

Sample application:

Try out the sample application on Google Play

Gplay

Screenshots:

screenshot 1 screenshot 2 screenshot 3 screenshot 4

Usage

Version 2.0.0 includes a major breaking change to the AsymmetricGridViewAdapter. You now provide your own adapter to the AsymmetricGridViewAdapter constructor instead of extending it.

In your build.gradle file:

dependencies {
    implementation 'com.felipecsl.asymmetricgridview:library:2.0.1'
}

In your layout xml:

<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

In your activity class:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (AsymmetricGridView) findViewById(R.id.listView);

    // Choose your own preferred column width
    listView.setRequestedColumnWidth(Utils.dpToPx(this, 120));
    final List<AsymmetricItem> items = new ArrayList<>();

    // initialize your items array
    adapter = new ListAdapter(this, listView, items);
    AsymmetricGridViewAdapter asymmetricAdapter =
        new AsymmetricGridViewAdapter<>(this, listView, adapter);
    listView.setAdapter(asymmetricAdapter);
}

Whenever your adapter changes (add or remove items), the grid will automatically reflect those changes by subscribing to your adapter changes.

Toggle to enable/disable reordering of elements to better fill the grid

// Setting to true will move items up and down to better use the space
// Defaults to false.
listView.setAllowReordering(true);

listView.isAllowReordering(); // true

Snapshots of the development version are available in Sonatype's snapshots repository.

Works with Android 2.3.x and above.

Caveats

  • Currently only has good support for items with rowSpan = 2 and columnSpan = 2. In the near future it will support different layout configurations.

  • It will work best if you don't have too many items with different sizes. Ideally less than 20% of your items are of special sizes, otherwise the library may not find the best way to accommodate all the items without leaving a lot of empty space behind.

  • Row layout is too complex, with many nested LinearLayouts. Move to a more flat layout with a custom ViewGroup possibly.

Contributing

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.

Copyright and license

Code and documentation copyright 2011-2015 Felipe Lima. Code released under the MIT license.

More Repositories

1

wombat

Lightweight Ruby web crawler/scraper with an elegant DSL which extracts structured data from pages.
Ruby
1,307
star
2

GifImageView

Android ImageView that handles animated GIF images
Kotlin
1,165
star
3

ktnes

A multiplatform NES emulator written in Kotlin
Kotlin
304
star
4

QuickReturn

Android ListView that implements the QuickReturn UI pattern. Written from scratch with focus on performance.
Java
191
star
5

kales

Kotlin on Rails
HTML
86
star
6

random-maze-generator

Find the shortest path out of a generated random maze. Rendered with canvas, tested with Jasmine.
JavaScript
62
star
7

brazil.db

πŸ‡§πŸ‡· Tabelas Postgres/MySQL com todas as cidades, estados, ruas, latitude, longitude e CEPs do Brasil
46
star
8

roberthood

Unofficial robinhood.com web UI
JavaScript
41
star
9

AbsListViewHelper

Really simple attacher class to add a header and/or a footer to an Android ListView or GridView
Java
37
star
10

Android-ImageManager

[DEPRECATED] An image downloading and caching library for Android
Java
26
star
11

churras

πŸ₯© DeFi wallet dashboard dApp
TypeScript
23
star
12

cs-exercises

A collection coding problems and solutions to stay in shape
JavaScript
17
star
13

6502Android

A 6502 Emulator for Android written in Kotlin
Kotlin
14
star
14

saasquatch

Rails boilerplate project for Saas websites
Ruby
6
star
15

show-do-milhao

πŸ’° A command line Show do MilhΓ£o app
Haskell
6
star
16

obgen

Observable (reactive streams) pattern implemented using es2015 in Typescript
TypeScript
6
star
17

brownian-tree-webgl

Brownian Tree rendered with WebGL with Rust + WASM
Rust
4
star
18

hackerrank

My solutions to some hackerrank challenges
Kotlin
3
star
19

android-bookstore

Java
3
star
20

kt-micrograd

Kotlin port of karpathy/micrograd
Kotlin
3
star
21

felipecsl.com

My personal website and blog
HTML
3
star
22

rusty-chess

A chess game written in Rust compiled for the web with WASM
Rust
3
star
23

tree-viz

Render a Tree data structure in a HTML canvas with next.js
TypeScript
3
star
24

imdb-browser

Next.js app for browsing IMDB data for movies and tv shows
TypeScript
2
star
25

dover

CMS as a service written in ASP.NET MVC
C#
2
star
26

hexaco-viz

Visualization tool for HEXACO personality test results
JavaScript
2
star
27

julipe.org

JuLipe Estate Inc.
JavaScript
1
star
28

dover-csharp-api

CSharp Library for integration with Dover
C#
1
star
29

bin-packing

A collection of common bin packing algorithms in Kotlin
Kotlin
1
star
30

old-felipecsl.com

My Blog website on Octopress
JavaScript
1
star
31

mensagei.ro

A simple web based instant messenger
1
star
32

felipecsl

1
star
33

kapt-classloader-bug

Proof of concept for a bug with the Kotlin kapt compiler as of version 1.2.40
Java
1
star